在异常时关闭流 - 可以假设异常可能发生的地方?

时间:2012-07-06 10:41:06

标签: java exception-handling io

这更像是一种风格和挑剔的问题,但我对这方面的意见很好奇。请考虑以下代码(并忽略我可以使用不同的函数来避免此问题):

FileUtils.copyInputStreamToFile(new FileInputStream(f1), f2);

copyInputStreamToFile来自apache.commons.io并将关闭该流。我认为这应该在所有通常的情况下关闭InputStream,因为如果在创建InputStream时发生异常,则无法关闭,如果在copyInputStreamToFile内发生,则此函数将关闭流我

但是,假设InputStream的创建与copyInputStreamToFile中的try-block的开始之间不存在异常或错误,这是否真的安全?我正在考虑OutOfMemoryErrorThreadDeath等不寻常的事情。所以,我们可以将上面的代码重写为:

InputStream is = null;
try {
    is = new FileInputStream(f1);
    FileUtils.copyInputStreamToFile(is, f2);
} finally {
    IOUtils.closeQuietly(is);
}

那应该是安全的,但你认为有必要吗?

1 个答案:

答案 0 :(得分:0)

我认为这取决于您的应用程序是否并发。如果是,则不能假设在创建 InputStream copyInputStreamToFile 的主体之间不会运行其他代码。

当应用程序不并发时,

Marko Topolnik 会回答这种情况。