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
沒有可用的位元組寫入。