0
的ServerSocketChannel
被這樣使用:的SocketChannel讀()行爲 - 短讀取
ServerSocketChannel srv = ServerSocketChannel.open();
srv.socket().bind(new java.net.InetSocketAddress(8112));
SocketChannel client = srv.accept();
當接收到一個連接,數據被讀出這種方式:
ByteBuffer data = ByteBuffer.allocate(2000);
data.order(ByteOrder.LITTLE_ENDIAN);
client.read(data);
logger.debug("Position: {} bytes read!", data.position());
它打印:
位置:讀取16個字節!
爲什麼SocketChannel不會阻塞,直到緩衝區被填滿?
從ServerSocketChannel.accept()
API(爪哇7):
通過此方法返回的套接字通道,如果有的話,將在 不管該通道的阻斷模式的阻塞模式。
SocketChannel塊的write(ByteBuffer buffer)
?我怎麼測試呢?
謝謝你的時間!
寫入(ByteBuffer緩衝區)操作會發生什麼? – AndrewBourgeois
另外,任何人都可以解釋哪個用例返回0爲讀(...)或寫(...)?如果它保持讀取0字節,我可能想在某個時間點進行一些睡眠(10)。但在我這樣做之前,我想明白。 ;-) – AndrewBourgeois
@AndrewBourgeois阻塞模式寫入將阻塞,直到所有數據傳輸完畢。非阻塞寫入可能會傳輸零個或多個字節。只有非阻塞讀取可以返回零,這意味着沒有數據存在。它與Selector和OP_READ結合使用。 – EJP