关闭套接字会关闭流吗?

Posted

技术标签:

【中文标题】关闭套接字会关闭流吗?【英文标题】:Does closing the socket close the stream? 【发布时间】:2013-07-17 12:13:23 【问题描述】:

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

    关闭套接字也会自动关闭流?

【问题讨论】:

【参考方案1】:

来自Socket Javadoc:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于关闭套接字会关闭流吗?的主要内容,如果未能解决你的问题,请参考以下文章

关闭 BufferedReader/PrintWriter 是不是会关闭套接字连接?

using 子句会关闭此流吗?

处理流阅读器会关闭流吗?

为啥在关闭客户端套接字时,他的进程会更改状态“Z”(僵尸)?

如何强制系统关闭底层套接字

如果达到超时,gen_tcp:recv/3 是不是会关闭套接字?