Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:Reader.close()是否关闭任何链接的读卡器?_Java - Fatal编程技术网

Java:Reader.close()是否关闭任何链接的读卡器?

Java:Reader.close()是否关闭任何链接的读卡器?,java,Java,比如说我做了如下事情: Reader r = new BufferedReader(new FileReader(file)); ... read ... r.close() 这是否会关闭底层文件读取器(并释放打开的文件句柄) -戴夫:是的。是的。我在用它做插座时发现了这一点 基本上,你只是不能关闭它,直到你完成与家长。对于插座,这实际上会关闭插座:-(是的,在最外层的读卡器上调用close就足够了 网站上的文章有一个关于流链接的部分,内容如下: [……] […]关闭链接时 流,您只需关

比如说我做了如下事情:

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

... read ...

r.close()
这是否会关闭底层文件读取器(并释放打开的文件句柄)


-戴夫:是的。是的。我在用它做插座时发现了这一点


基本上,你只是不能关闭它,直到你完成与家长。对于插座,这实际上会关闭插座:-(

是的,在最外层的
读卡器上调用
close
就足够了

网站上的文章有一个关于流链接的部分,内容如下:

[……]

[…]关闭链接时 流,您只需关闭 最外面的流类,因为
close()
通过所有链接的类;在
在上面的例子中,您只需
调用上的
close()
方法
GZIPOutputStream
class

因此,在这种情况下,只需在
BufferedReader
上调用
close

正如类的说明所示,该方法将释放任何底层资源:

关闭流并释放与其关联的任何系统资源。[…]

因此,我们可以推断任何底层的
读卡器
s,即使它可能没有明确地这样说。

根据,它只是“释放与[读卡器]相关的任何系统资源”。读卡器是否关闭任何嵌套读卡器取决于特定类的实现


在您提到的特定示例中-是的,
BufferedReader
将始终关闭嵌套读取器。但是,虽然这通常会发生,但这并不一定意味着具有某种嵌套读取器的
reader
接口的所有实现都将传播
close()
调用它们-您需要查看该特定类的文档以找到答案。

是的,这是装饰器模式。

当然,如果
BufferedReader
构造函数抛出,您将无法关闭底层的
文件阅读器(无论如何,你不能指定字符集,所以它本身就是一个无希望的)。真的(模数)但是考虑:所以,如果<代码> CubutOutPutsStudio抛出<代码> IOExux< /代码>在你的示例中,无论如何,调用方不应该关闭<代码> fos < /代码>吗?
FileOutputStream  fos = new FileOutputStream("myfile.out");   
CryptOutputStream cos = new CryptOutputStream(fos);   
GZIPOutputStream  gos = new GZIPOutputStream(cos);