在ServerSocketChannel使用这种方式:
ServerSocketChannel
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(Java 7):
ServerSocketChannel.accept()
此方法返回的套接字通道(如果有)将处于阻塞模式,而与该通道的阻塞模式无关。
write(ByteBuffer buffer)SocketChannel的是否阻塞?我该如何测试呢?
write(ByteBuffer buffer)
感谢您的时间!
阻止模式意味着它将一直阻止,直到接收到 任何 数据为止。它不必是整个缓冲区都已满。
如果要确保已收到整个缓冲区的数据,则应read()循环执行,直到填满缓冲区。
read()