4

我正在 NIO 中编写一些网络代码。

ByteBuffer buf = ByteBuffer.allocate(Hub.getBufferSize());
int read = channel.read(buf);
if (read == -1) {
    client.disconnect();
    return;
} else if (read == 0) {
    return;
}

我知道这是一个读取返回-1,这意味着已经到达连接流的末尾。但这是否意味着与该客户端的连接现已结束?此外,一旦到达流结束,服务器是否应该显式关闭通道,或者它是多余的?

谢谢。

4

2 回答 2

6

我知道这是一个读取返回-1,这意味着已经到达连接流的末尾。但这是否意味着与该客户端的连接现已结束?

这是同一件事。这些不是两个不同的概念,因此其中一个暗示另一个。这是同一件事。

此外,一旦到达流结束,服务器是否应显式关闭通道

是的。

如果不关闭,就是socket泄漏和内存泄漏。

还是多余的?

当然不是。看上面。此外,如果您不关闭它,您将继续OP_READ使用它并继续阅读-1它。只是浪费时间。

于 2013-04-25T04:42:48.320 回答
0

流关闭后,将无法重新打开它。明确关闭事物以避免可能的资源泄漏总是一个好主意。

于 2013-04-25T04:26:03.640 回答