Java NIO SocketChannel

Java NIO SocketChannel用於將通道與TCP(傳輸控制協議)網路套接字連接。它相當於網路編程中使用的Java網路套接字(Socket)。

Java NIO中有兩種可用於創建SocketChannel的方法:

  • 當傳入連接到達ServerSocketChannel時,可以創建它。
  • 打開一個SocketChannel,並在網路上與伺服器連接。

我們來看看使用選擇器的SocketChannel客戶端 - 伺服器通信的框圖:

打開套接字通道 - SocketChannel

可以通過調用SocketChannel.Open()方法打開一個SocketChannel

打開套接字通道(SocketChannel)的語法是:

SocketChannel sc = SocketChannel.open();
sc.connect(new InetSocketAddress("localhost", 9099));

關閉套接字通道 - SocketChannel

通過調用SocketChannel.close()方法執行所有操作後,可以關閉SocketChannel

關閉套接字通道(SocketChannel)的語法是:

SocketChannel.close();

從SocketChannel讀取

要從SocketChannel讀取數據,調用read()方法之一。

下麵來看如何從SocketChannel讀取數據的例子:

ByteBuffer bb = ByteBuffer.allocate(84);
int bytesRead = SocketChannel.read(bb);

首先分配緩衝區。 從SocketChannel讀取的數據存儲在緩衝區中。

其次,調用SocketChannel.read()方法,並將數據從SocketChannel讀入緩衝區。 read()方法返回寫入緩衝區位元組數的整數值。

寫入套接字通道-SocketChannel

要將數據寫入SocketChannel,可使用SocketChannel.write()方法並將緩衝(buffer)作為參數。

下麵來看看一下將數據寫入SocketChannel的例子:

String newData = "The new String is writing in a file ..." + System.currentTimeMillis();
ByteBuffer bb= ByteBuffer.allocate(48);
bb.clear();
bb.put(newData.getBytes());
bb.flip();
while(bb.hasRemaining()) {
    SocketChannel.write(bb);
}

SocketChannel.write()方法在while迴圈中使用,因為write()方法寫入SocketChannel的位元組數目是未知的,因此需要重複使用write()方法,直到Buffer沒有可用的位元組寫入。


上一篇: Java NIO選擇器 下一篇: Java NIO ServerSocketChannel