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

Mar*_*ius 4 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;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

use*_*421 6

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

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

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

是.

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

还是多余的?

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