Java:Reader.close()关闭任何链接的读者吗?

Dav*_*ave 12 java

说我做的事情如下:

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的部分,其中说明如下:

FileOutputStream  fos = new FileOutputStream("myfile.out");   
CryptOutputStream cos = new CryptOutputStream(fos);   
GZIPOutputStream  gos = new GZIPOutputStream(cos);
Run Code Online (Sandbox Code Playgroud)

[...]

[...]关闭链式流时,您只需关闭最外层的流类,因为 close()调用会自动通过所有链接类进行处理; 在上面的示例中,您只需close()GZIPOutputStream类上调用该方法 .

因此,在这种情况下,人们只需要调用closeBufferedReader.

正如dtsazza已经提到,在Java的API规范BufferedReader类说,BufferedReader.close法会释放任何潜在的资源:

关闭流并释放与其关联的所有系统资源.[...]

因此,可以推断出任何潜在的Readers,即使它可能没有明确说明.