正确释放I / O资源

时间:2012-12-26 13:13:32

标签: java file io

我想知道释放文件资源/句柄的最佳/适当方式是什么。

传统代码,

BufferredInputStream stream = null
try{
  ----
  stream = new BufferredInputStream(new FileInputStream());
  ----
} finally{
  if(stream != null){
    stream.close()
  }

}

单独关闭BufferredInputStream.close是否会释放文件句柄,或者还需要明确调用基础stream(i.e. FileInputStream.close())

P.S. Javadoc for [FilterOutputStream.close]方法指定它也将显式关闭基础流。但其他流似乎在文档中没有这个。

[FilterOutputStream.close]: http://docs.oracle.com/javase/1.4.2/docs/api/java/io/FilterOutputStream.html#close%28%29

请指教。提前谢谢。

4 个答案:

答案 0 :(得分:4)

您始终可以检查基础类的源代码,以确定确切的行为。

但是,在这种情况下,在close()上调用BufferedInputStream也会关闭基础流,即FileInputStream

源代码可用here

答案 1 :(得分:2)

当链接多个流时,关闭最后构建的流将关闭底层流。因此,关闭BufferedInputStream也会关闭基础FileInputStream

因此,您只需在一个流上调用close(),它就会自动关闭基础流。

答案 2 :(得分:2)

你的方法是正确的。如有疑问,请务必查看源代码。 http://www.docjar.com/html/api/java/io/BufferedInputStream.java.html关闭方法正在关闭"在"它被链接到BufferedInputStream。

答案 3 :(得分:0)

BufferredInputStream本身不包含任何系统资源,因此BufferredInputStream.close()将简单地传播对它包装的InputStream的close调用..所以它应该没问题。