SocketChannel 读取保持读取“-1”字节,这意味着文档结束流。
在rox nio教程中他说
if (numRead == -1) {
// Remote entity shut the socket down cleanly. Do the
// same from our end and cancel the channel.
key.channel().close();
key.cancel();
return;
}
但我不确定他是对的,难道不会发生远程方向我发送N个字节,等待5秒(让我们假设没有超时)然后再向我发送M个字节。
调用read()方法时,我仍然会得到-1吗?如果是这样,我不想关闭socketChannel并取消注册它,而是等待下一个M字节。
另一方面,我不断从选择器中获得大量的READ事件,看起来像忙碌的等待。
在这种情况下,正确的做法是什么?
答案 0 :(得分:0)
他是对的。 -1表示对等方已断开连接。永远不会有更多的数据。在你提到的情况下,你不会得到-1。
当你得到-1时,你应该关闭频道。 NB他错的一点是关闭频道取消了关键:你不需要同时做这两件事。