如果读到returns -1 是socket自动关闭了吗?

If read returns -1 is the socket automatically closed?

  out.close ();
  in.read ( ByteBuffer.allocate ( 1 ) );
  in.close ();

在上面的代码片段中,out 是一个 WritableByteChannelin 是一个 ReadableByteChannel。一旦其中一个对等方发送了 EOT 信号,就会在处理结束时找到此代码。 close()out 上调用,然后读取 in 以从远程对等方的套接字获取 EOF。当read() returns -1时,表示对端关闭了socket。下一行的close()是不是多余的,因为本地套接字已经自动关闭了?

从对等端接收流结束和关闭通道是两件不同的事情。 end-of-stream 只是意味着不再接收数据,但通道在本地端仍然打开。您仍然应该调用 close() 来释放任何正在使用的本地资源。

When read() returns -1, it indicates that the peer has closed the socket.

他的插座。不是你的。 连接 目前处于入站方向的半关闭状态。由您来关闭您的终端,即您的套接字。