这更像是一种风格和挑剔的问题,但我对这方面的意见很好奇。请考虑以下代码(并忽略我可以使用不同的函数来避免此问题):
FileUtils.copyInputStreamToFile(new FileInputStream(f1), f2);
copyInputStreamToFile
来自apache.commons.io并将关闭该流。我认为这应该在所有通常的情况下关闭InputStream,因为如果在创建InputStream
时发生异常,则无法关闭,如果在copyInputStreamToFile
内发生,则此函数将关闭流我
但是,假设InputStream
的创建与copyInputStreamToFile
中的try-block的开始之间不存在异常或错误,这是否真的安全?我正在考虑OutOfMemoryError
或ThreadDeath
等不寻常的事情。所以,我们可以将上面的代码重写为:
InputStream is = null;
try {
is = new FileInputStream(f1);
FileUtils.copyInputStreamToFile(is, f2);
} finally {
IOUtils.closeQuietly(is);
}
那应该是安全的,但你认为有必要吗?
答案 0 :(得分:0)
我认为这取决于您的应用程序是否并发。如果是,则不能假设在创建 InputStream 和 copyInputStreamToFile 的主体之间不会运行其他代码。
当应用程序不并发时,Marko Topolnik 会回答这种情况。