我正在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,这意味着已经到达了连接流的末尾。但这是否意味着与该客户的连接现已结束?此外,如果服务器在到达流末尾时明确关闭通道,还是冗余?
感谢。
答案 0 :(得分:6)
我知道这是一个read返回-1,这意味着已经到达了连接流的末尾。但这是否意味着与该客户的连接现已结束?
这是一回事。这些不是两个不同的概念,因此其中一个暗示另一个。这是一回事。
此外,一旦到达流末尾,服务器是否应明确关闭通道
是
如果不关闭它,则是套接字泄漏和内存泄漏。
还是多余的?
当然不是。往上看。此外,如果您不关闭它,您将继续获取OP_READ
并继续阅读-1
。只是在浪费时间。
答案 1 :(得分:0)
流关闭后,无法重新打开它。明确关闭事物以避免可能的资源泄漏总是一个好主意。