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

时间:2009-09-25 15:20:53

标签: java

说我做的事情如下:

Reader r = new BufferedReader(new FileReader(file));

... read ...

r.close()

这是否会关闭底层的FileReader(并释放打开的文件句柄)?

-Dave

4 个答案:

答案 0 :(得分:17)

是的,在最外面close调用Reader就足够了。

Java I/O Streams上的Sun Developer Network文章有一个关于流链接的部分,其中包含以下内容:

FileOutputStream  fos = new FileOutputStream("myfile.out");   
CryptOutputStream cos = new CryptOutputStream(fos);   
GZIPOutputStream  gos = new GZIPOutputStream(cos);
     

[...]

     

[...]关闭链接时   溪流,你只需要关闭   最外层的流类因为   close()电话会自动涓涓细流   通过所有链式课程;在   上面的例子,你会很简单   调用close()方法   GZIPOutputStream上课。

因此,在这种情况下,只需要在close上拨打BufferedReader

作为dtsazza already mentionedJava API Specification类的BufferedReader表示BufferedReader.close方法将释放任何基础资源:

  

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

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

答案 1 :(得分:4)

根据the documentation,它只是“释放与[读者]相关的任何系统资源”。读者是否关闭任何嵌套的读者是特定类的实现问题。

在您提到的具体示例中 - 是的,BufferedReader将始终关闭嵌套的阅读器。但是当这个通常发生时,这并不一定意味着具有某种嵌套读者的Reader接口的所有实现将传播{{1调用它们 - 您需要检查该特定类的文档以查找。

答案 2 :(得分:0)

是。确实如此。我在将它用于插座时发现了这一点。

My Question

基本上你不能在父母完成之前关闭它。在套接字的情况下,这实际上会关闭你的套接字。 : - (

答案 3 :(得分:0)

是的,这是装饰者模式。