gpt4 book ai didi

java - stream.close 是否关闭任何封闭的流

转载 作者:行者123 更新时间:2023-11-29 05:18:28 27 4
gpt4 key购买 nike

据我所知,在流 (I/O) 上调用 close 会关闭任何底层流,包括它本身。
反之亦然 ?

例如:

InputStream inStream = new FileInputStream("abc.txt"); 
BufferedInputStream bin = new BufferedInputStream(inStream);
inStream.close();

这也会关闭 bin 吗?
如果没有,是否需要这样做?即:它会导致内存泄漏吗?

最佳答案

Will this closes bin also ?

封闭流无法关闭封闭流,因为它不知道。

If not, is there any need to do so? ie : will it cause a memory leak ?

它不会导致内存泄漏,因为资源由封闭流分配/持有并在关闭时正确释放,但封闭流可能会实现缓冲和其他翻译逻辑,如果不刷新或关闭,数据实际写入封闭流的内容可能不完整/损坏。

因此始终建议刷新封闭流(最好是关闭它,但如果不能,至少应该刷新它)。

刷新封闭流并不总是足够的,因为要使底层流包含有效数据,封闭流可能会添加额外的填充或格式。一个例子是 ZipOutputStream,为了提供一个有效的 zip 文件(zip 格式),它提供了 ZipOutputStream.finish() 方法,除了刷新之外,它还会写入额外的 zip -文件相关数据(并且不关闭底层流)。

您可能会发现这很有用:

Close Encapsulating Writers/Streams for ServletOutputStream

关于java - stream.close 是否关闭任何封闭的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25684558/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com