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

时间:2015-11-03 10:19:51

标签: java sockets

我只想清楚地怀疑我已经窝了很长时间了:即使代码中没有调用.close()方法,Java中的套接字是否可能被关闭?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

以下代码位于 java.net.AbstractPlainSocketImpl

/**
 * Cleans up if the user forgets to close it.
 */
protected void finalize() throws IOException {
    close();
}
运行垃圾收集器时会调用

finalize()。因此,如果您丢失了对Socket的所有引用,它将被关闭。你不应该这样做,因为这是不好的做法 - 你永远不知道什么时候垃圾收集器会运行,所以套接字可以保持打开状态一段时间。我真的不知道这是不是因为它会调用下面的close()。关闭输入和输出流与套接字不同。我不认为他们真的很重要。