说我做的事情如下:
Reader r = new BufferedReader(new FileReader(file));
... read ...
r.close()
Run Code Online (Sandbox Code Playgroud)
这是否会关闭底层的FileReader(并释放打开的文件句柄)?
戴夫
coo*_*ird 17
是的,呼吁close最外面的Reader就足够了.
Sun Developer Network上的Java I/O Streams文章有一个关于Stream Chaining的部分,其中说明如下:
Run Code Online (Sandbox Code Playgroud)FileOutputStream fos = new FileOutputStream("myfile.out"); CryptOutputStream cos = new CryptOutputStream(fos); GZIPOutputStream gos = new GZIPOutputStream(cos);[...]
[...]关闭链式流时,您只需关闭最外层的流类,因为
close()调用会自动通过所有链接类进行处理; 在上面的示例中,您只需close()在GZIPOutputStream类上调用该方法 .
因此,在这种情况下,人们只需要调用close的BufferedReader.
正如dtsazza已经提到,在Java的API规范的BufferedReader类说,BufferedReader.close法会释放任何潜在的资源:
关闭流并释放与其关联的所有系统资源.[...]
因此,可以推断出任何潜在的Readers,即使它可能没有明确说明.
| 归档时间: |
|
| 查看次数: |
6137 次 |
| 最近记录: |