SocketChannel继续读-1

时间:2017-01-02 17:53:26

标签: java nio

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事件,看起来像忙碌的等待。

在这种情况下,正确的做法是什么?

1 个答案:

答案 0 :(得分:0)

他是对的。 -1表示对等方已断开连接。永远不会有更多的数据。在你提到的情况下,你不会得到-1。

当你得到-1时,你应该关闭频道。 NB他错的一点是关闭频道取消了关键:你不需要同时做这两件事。