首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java NIO 非阻塞 I/O 入門範例:使用 SocketChannel 獲取新浪首頁

     編輯:Java 相關知識

前言

本文提供一個最簡單的非阻塞 I/O 範例,展示如何使用 SocketChannel、ByteBuffer 連接 HTTP 伺服器、發送請求並接收回應,幫助讀者建立感性認識,後續章節將深入解析通道與緩衝區細節。

完整程式碼

package test;
import java.net.*;
import java.nio.*;
import java.nio.channels.*;
import java.io.*;

public class FirstNonBlockingIO {
    public static void main(String[] args) throws Exception {
        SocketAddress remote = new InetSocketAddress("www.sina.com.cn", 80);
        SocketChannel channel = SocketChannel.open(remote);

        String request = "GET / HTTP/1.1\r\n" +
                         "Host:www.sina.com.cn\r\n" +
                         "Connection:close\r\n\r\n";
        ByteBuffer header = ByteBuffer.wrap(request.getBytes());
        channel.write(header);

        ByteBuffer buffer = ByteBuffer.allocate(1024);
        WritableByteChannel out = Channels.newChannel(System.out);

        while (channel.read(buffer) != -1) {
            buffer.flip();
            out.write(buffer);
            buffer.clear();
        }
        channel.close();
    }
}

執行與驗證

java test.FirstNonBlockingIO > sina.txt

sina.txt 將包含 HTTP 回應頭與 HTML 內容。

與同步 I/O 三大差異

操作同步 I/O非阻塞 I/O (NIO)
連接伺服器SocketSocketChannel.open()
寫入資料OutputStreamSocketChannel.write(ByteBuffer)
讀取資料InputStreamSocketChannel.read(ByteBuffer)

核心概念預告

  • 通道:雙向傳輸管道,取代單向 Stream。
  • 緩衝區:資料容器,配合 flip()/clear() 切換讀寫模式。
  • 選擇器:後續將介紹,單執行緒管理多通道就緒事件。

結語

此範例雖簡單,但展示了 NIO 核心 API 的基本協作流程。掌握通道與緩衝區操作,是進入非阻塞網路程式設計的第一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved