java - 为什么 InputStream.close() 声明抛出 IOException?

标签 java exception ioexception

java.io.InputStream.close()方法被声明为抛出 IOException。到底什么情况下会抛出这样的异常?

编辑:是的,我已经阅读了 javadoc。任何人都可以比“发生 I/O 错误时”更具体吗? 什么在关闭 InputStream 时会发生 I/O 错误?

最佳答案

在从文件系统读取输入流的情况下,当文件系统本身在关闭期间更新文件上的上次访问时间元数据或其他一些元数据时,可能会引发错误。无论如何,这在实践中几乎从未发生过。

在从网络连接读取输入流的情况下,关闭错误更容易想象。网络套接字的正常关闭实际上涉及通过连接发送关闭请求(TCP/IP FIN 数据包)并等待另一端确认此关闭请求。 (事实上​​,连接的另一端会依次发送一个关闭请求,关闭端确认该请求。)因此,对于套接字输入流,关闭操作实际上涉及通过连接发送流量,因此关闭可以因错误而失败。

请注意,在许多实现中,如果流已经关闭,close() 通常不会抛出 IOException;它只是默默地失败再次关闭流。

关于java - 为什么 InputStream.close() 声明抛出 IOException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16369462/

相关文章:

java - Apache POI 打开工作簿时出错

生产中的 WCF "Too many active security negotiations"错误

java - IOException 后重新启动 ServerSocket

java - ServerSocket.close()。它什么时候抛出异常?

java - 用于 Spring Boot 获取请求的 mongo uri

java - 我将 Spring 库更新到 5.2.6 给出了 log4j 的 Class Cast 异常

exception - Common Lisp 错误处理系统中 'store-value' 和 'use-value' 重新启动的语义

Silverlight 验证消息位置

java - 调试 "Too many files open"问题

java if 语句在 if(item instanceof nomclass) 中不起作用