out.close ();
in.read ( ByteBuffer.allocate ( 1 ) );
in.close ();
在上面的代码片段中,out
是一个WritableByteChannel
,in
是一个ReadableByteChannel
。一旦其中一个对等方发送了 EOT 信号,就会在处理结束时找到此代码。 close()
在 out
上调用,然后读取 in
以从远程对等方的套接字获取 EOF。当read()
返回-1 时,表明对端已关闭套接字。下一行的close()
是不是多余的,因为本地套接字已经自动关闭了?
最佳答案
从对等点接收流结束和关闭 channel 是两件不同的事情。 end-of-stream 只是意味着不再接收数据,但 channel 在本地端仍然打开。您仍然应该调用 close()
来释放任何正在使用的本地资源。
关于java - 如果 read 返回 -1 套接字是否自动关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28574738/