一旦到达流末尾,是否应明确关闭连接?

时间:2013-04-25 04:13:08

标签: java networking nio

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

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

我知道这是一个read返回-1,这意味着已经到达了连接流的末尾。但这是否意味着与该客户的连接现已结束?此外,如果服务器在到达流末尾时明确关闭通道,还是冗余?

感谢。

2 个答案:

答案 0 :(得分:6)

  

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

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

  

此外,一旦到达流末尾,服务器是否应明确关闭通道

如果不关闭它,则是套接字泄漏和内存泄漏。

  

还是多余的?

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

答案 1 :(得分:0)

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