天天看點

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

¥ 我要打賞

糾錯/補充

收藏

加QQ群啦,易百教程官方技術學習群

注意:建議每個人選自己的技術方向加群,同一個QQ最多限加 3 個群。