一旦达到流结束,连接是否应该被关闭?

问题描述:

我正在NIO写一些网络代码。一旦达到流结束,连接是否应该被关闭?

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

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

谢谢。

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

这是一回事。这些不是两个不同的概念,其中一个意味着另一个。这是同一件事。

此外,如果一旦达到

是最终的流服务器明确的关闭通道。

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

还是它是多余的?

当然不是。往上看。另外,如果你不关闭它,你将继续收到OP_READ,并继续阅读-1。只是在浪费时间。

+0

这回答了这一切。谢谢。 – 2013-04-25 22:06:55

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

+0

不只是一个'好主意'。这是强制性的。 – EJP 2015-03-23 22:13:54