mer*_*ike 28 java exception ioexception
java.io.InputStream.close()声明该方法抛出一个IOException.在什么情况下会抛出这样的例外?
编辑:是的我已经阅读了javadoc.任何人都可以比"发生I/O错误时"更具体吗?关闭时会发生什么 I/O错误InputStream?
Kon*_*kov 19
在从文件系统读取输入流的情况下,当文件系统本身在关闭期间更新文件上的最后访问时间元数据或一些其他元数据时,可以引发错误.无论如何,这几乎从未在实践中发生过.
在从网络连接读取输入流的情况下,可以更容易地想到关闭时的错误.网络套接字的正常关闭实际上涉及通过连接发送的关闭请求(TCP/IP FIN数据包),并等待另一端确认此关闭请求.(实际上,连接的另一端然后又发送一个闭包请求,结束端确认.)因此,在套接字输入流的情况下,闭包操作实际上涉及通过连接发送流量,因此闭包可以失败并出错.
请注意,在许多实现中,如果流已经关闭,close()通常不抛出IOException; 它只是无声地无法再次关闭流.
小智 5
我正在查看 Java 源代码,发现了一些有趣的东西,这表明了原因IOException。InputStream 是一个抽象类。因此,我们无法预测将关闭的输入类型,因此保持信息流动是有好处的。
无论使用该输入流的代码都需要能够抛出IOException,因为关闭输入流可能会失败。如果失败,无论使用该实现的任何人都需要知道它,因为很有可能需要对其进行处理。
了解 Java 中异常结构的布局非常重要。当然,每个例外都会扩展Exception. 然而,还有更广泛的异常类别:java.lang.IOException是其中之一,涵盖所有可能的输入/输出异常。当我们说出现 I/O 错误时,我们指的是属于IOException. 因此,许多异常都扩展了这一异常,例如FileNotFoundException,,EOFException等等,因为有一个广泛的、总体的异常来管理这些异常很重要。
因此,任何 IO 类都需要能够在关闭时抛出任何各种 IOException。close()因此必须抛出- 这使得它的实现也IOException能够抛出任何扩展。IOException这就是为什么close()throws IOException- 异常是继承的,并且在关闭流时您需要能够处理任何 IOException。
以下是一些值得注意的场景:
close()对于操作系统来说实际上是至关重要的,因为它需要有一个指示文件何时不再繁忙的指示)IOException(例如FileNotFoundException)IOException您可以通过运行来检查导致的原因Exception.getMessage()。