我只想清楚地怀疑我已经窝了很长时间了:即使代码中没有调用.close()
方法,Java中的套接字是否可能被关闭?
答案 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()。关闭输入和输出流与套接字不同。我不认为他们真的很重要。