6

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

传统代码,

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

4 回答 4

4

您始终可以检查底层类的源代码以确定确切的行为。

但是,在这种情况下,调用close()onBufferedInputStream也会关闭底层流,即FileInputStream.

源代码可在此处获得

于 2012-12-26T13:25:25.370 回答
2

当多个流被链接时,关闭最后构建的流将关闭底层流。因此,平仓BufferedInputStream也将平仓底层证券FileInputStream

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

于 2012-12-26T13:21:45.697 回答
2

你的方法是正确的。如有疑问,请始终检查源代码。http://www.docjar.com/html/api/java/io/BufferedInputStream.java.html close 方法正在关闭链接到 BufferedInputStream 的“in”。

于 2012-12-26T13:23:54.110 回答
0

BufferredInputStream 本身不包含任何系统资源,因此 BufferredInputStream.close() 将简单地将关闭调用传播到它包装的 InputStream ..所以它应该做得很好。

于 2012-12-26T13:27:37.007 回答