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);