我想知道释放文件资源/句柄的最佳/适当方式是什么。
传统代码,
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
请指教。提前谢谢。
答案 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调用..所以它应该没问题。