在C#中,我几乎总是using在处理流对象时使用该模式.例如:
using (Stream stream = new MemoryStream())
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
通过使用using块,我们确保在代码块执行后立即在流上调用dispose.
我知道Java没有等效的using关键字,但我的问题是,当使用像FileOutputStreamJava这样的对象时,我们是否需要做任何内务管理以确保它被处理掉?我正在看这个代码示例,我注意到他们没有做任何事情.
我只是想知道Java处理流的最佳实践是什么,或者它是否足以让垃圾收集器处理它.
通常,您必须执行以下操作:
InputStream stream = null;
try {
// IO stuff - create the stream and manipulate it
} catch (IOException ex){
// handle exception
} finally {
try {
stream.close();
} catch (IOException ex){}
}
Run Code Online (Sandbox Code Playgroud)
但是apache commons-io提供IOUtils.closeQuietly(stream);了一个finally条款,使它变得有点不那么丑陋.我认为在Java 7中会有一些改进.
更新:Jon Skeet做了一个非常有用的评论,异常的实际处理很可能在类本身中发生(除非它只是记录它,但实际上并没有处理它).因此,您最好声明您的方法抛出该异常,或将其包装在自定义异常中(简单的原子操作除外).
您想要的功能确实是在 Java 7 中引入的,名称为“try-with-resources 语句”(也称为自动资源管理 (ARM))。这是代码:
try (InputStream in = new FileInputStream("foo.txt")) {
...
} // This finally calls in.close()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2638 次 |
| 最近记录: |