【发布时间】:2012-07-06 19:41:22
【问题描述】:
这更像是一个风格和挑剔的问题,但我很好奇对此的看法。考虑下面的代码(忽略我可以使用不同的函数来避免这个问题):
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);
}
这应该是安全的,但你认为有必要吗?
【问题讨论】:
-
没有解决方案有助于对抗
ThreadDeath,OOME 也不会突然发生——它只能从请求内存分配的代码中抛出。
标签: java exception-handling io