首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当我关闭一个BufferedInputStream时,底层的InputStream是否也关闭了?

当我关闭一个BufferedInputStream时,底层的InputStream是否也关闭了?
EN

Stack Overflow用户
提问于 2014-06-23 17:51:59
回答 5查看 9.3K关注 0票数 19
InputStream in = SomeClass.getInputStream(...);
BufferedInputStream bis = new BufferedInputStream(in);

try {
    // read data from bis
} finally {
    bis.close();
    in.close();    
}

BufferedInputStream.close()的javadoc没有提到底层流是否关闭:

关闭此输入流,并释放与该流关联的任何系统资源。流关闭后,进一步的read()、available()、reset()或skip()调用将抛出IOException。关闭以前关闭的流没有任何效果。

显式调用in.close()是必需的,还是应该通过调用bis.close()将其关闭

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-06-23 17:57:21

来自BufferedInputStream的源代码:

public void close() throws IOException {
    byte[] buffer;
    while ( (buffer = buf) != null) {
        if (bufUpdater.compareAndSet(this, buffer, null)) {
            InputStream input = in;
            in = null;
            if (input != null)
                input.close();
            return;
        }
        // Else retry in case a new buf was CASed in fill()
    }
}

所以答案是:是的。

票数 27
EN

Stack Overflow用户

发布于 2014-06-23 17:58:46

BufferedInputStream本身并不包含任何系统资源;它只是包装了一个包含这些资源的InputStream。因此,BufferedInputStream将关闭操作转发到包装的InputStream上,然后它将释放其资源。

票数 8
EN

Stack Overflow用户

发布于 2014-06-23 17:55:01

当你关闭一个BufferedInputStream时,底层的InputStream实际上也是关闭的。:)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24362980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档