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

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

4

2 回答 2

9

SocketJavadoc

关闭此套接字也将关闭套接字的InputStreamOutputStream

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

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

于 2013-07-18T13:50:35.880 回答
5

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

于 2013-07-19T00:12:00.653 回答