在什么情况下关闭流会失败



根据我读过的许多关于流等的教程,关闭流而不是在try-block内部,而是在final内部关闭被认为是很好的做法,以确保它关闭有和没有例外。

当然,这必须再次被尝试和捕获所包围,因为 .close(( 可以抛出 IOException。但是,由于在什么条件下可能会发生这种情况的Javadoc("抛出:IOException - 如果发生I/O错误"(非常模糊,我想知道具体必须发生什么才能在这个地方抛出此异常。下面是一个示例代码。


FileInputStream fis = null;
try {
    fis = new FileInputStream("C:\TestFiles\JapaneseFileNames");
    // Do some stuff
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if(fis != null) {
            fis.close();
        }
    } catch(IOException e) {
        throw new RuntimeException("Something happened, but what?", e);
    }
}
  • 如果流FilterOutputStream扩展,close()方法首先调用flush(),它可能会尝试一些I/O并遇到一个IOException,该被抛出给close()的调用者。 BufferedOutputStream是典型的情况。

  • 如果流FilterOutputStream扩展并环绕在另一个流上,则调用close()调用close()包装的流,其行为如上所述。 new DataOutputStream(new BufferedOutputStream(...))new ObjectOutputStream(new BufferedOutputStream(...))是典型的案例。

相关内容

  • 没有找到相关文章

最新更新