0

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

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

copyInputStreamToFile来自 apache.commons.io 并将关闭流。我认为这应该在所有常见情况下关闭 InputStream,因为如果在创建时发生异常,InputStream则没有什么可以关闭,如果内部发生异常,copyInputStreamToFile那么这个函数将为我关闭流。

InputStream但是,假设在中创建和开始尝试块之间没有异常或错误真的安全copyInputStreamToFile吗?我在想不寻常的事情,比如OutOfMemoryErroror ThreadDeath。因此,我们可以将上面的代码重写为:

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

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

4

1 回答 1

0

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

Marko Topolnik回答了应用程序不并发的情况。

于 2012-07-06T11:08:45.893 回答