关闭套接字会关闭流吗?

时间:2013-07-18 13:46:27

标签: java sockets stream inputstream outputstream

  1. 我在遗留的Java应用程序中工作,在许多文件中,使用套接字和流,其中套接字正在关闭而不是流,这是在关闭套接字之前关闭所有流所必需的。因为我得到“太多的打开文件错误”,这是因为没有关闭流错误.....

  2. 关闭套接字会自动关闭流吗?

2 个答案:

答案 0 :(得分:8)

来自Socket Javadoc

  

关闭此套接字也会关闭套接字InputStreamOutputStream

一般来说,关闭套接字应该足以关闭它创建的两个流。

您的“太多打开文件错误”很可能是由其他原因引起的。

答案 1 :(得分:4)

关闭其中任何一个会关闭另外两个,但是您应该关闭已经缠绕在套接字上的最外面的输出流(或Writer)。这将关闭输入流和套接字。如果您没有自己关闭最外面的输出流,它将不会被刷新,因此如果堆栈中有缓冲的输出流或写入器,您可能会丢失数据。您也可以在finally块中关闭套接字本身以确保:实际上缺少finally块可能是导致问题的原因。