Java 除了socket.close(),中的套接字是否可以以任何其他方式关闭?

Java 除了socket.close(),中的套接字是否可以以任何其他方式关闭?,java,sockets,Java,Sockets,我只是想澄清一个我已经怀有相当长一段时间的疑问:即使代码中没有调用.close()方法,Java中的套接字是否可能被关闭 是的。关闭套接字的输入流或输出流将关闭另一个流和套接字。下面的代码位于java.net.AbstractPlainSocketImpl /** * Cleans up if the user forgets to close it. */ protected void finalize() throws IOException { close(); } 在运行垃

我只是想澄清一个我已经怀有相当长一段时间的疑问:即使代码中没有调用
.close()
方法,Java中的套接字是否可能被关闭

是的。关闭套接字的输入流或输出流将关闭另一个流和套接字。

下面的代码位于java.net.AbstractPlainSocketImpl

/**
 * Cleans up if the user forgets to close it.
 */
protected void finalize() throws IOException {
    close();
}

在运行垃圾回收器时调用finalize()。因此,如果丢失对套接字的所有引用,它将被关闭。但是,您不应该这样做,因为这是一种糟糕的做法——您永远不知道垃圾收集器何时运行,因此套接字可能会保持打开状态一段时间。我真的不知道这是否算得上它在下面调用close()。关闭输入和输出流与套接字不同。我认为它们真的不重要。

System.exit()
上,或者可以使用
尝试资源自动关闭。
好问题。例如,如果关闭套接字的输入和输出流,会发生什么?这是否等同于关闭套接字?请定义closed
socket。仅当以前调用过
socket.close()
时,isClosed()
才会返回true。此答案是否取决于实现?或者您可以参考文档吗?它不依赖于实现。我的参考是Javadoc中的clear语句。关闭输入或输出流将关闭套接字。从这个角度看没有区别。