微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

谁关闭了一个带有资源块的try中返回的InputStream?

如何解决谁关闭了一个带有资源块的try中返回的InputStream?

在进行代码审查时,我偶然发现了一些看起来像这样的代码

try (InputStream stream = new BufferedInputStream(resource)) {
    return stream;
}

其中resource方法的其他位置定义。 请注意,这是示例代码,在现实生活中,请务必关闭stream,以免浪费资源

我的问题是:尝试使用资源块会代表我关闭stream吗?将stream返回给调用方后,他们可能会尝试使用它做一些有用的事情,或者禁止使用,将对它的引用保存在一个永不清除的全局变量中。

尝试使用资源块会遵循此参考并妥善清理吗?在我阅读的有关该语法的任何教程或文档中,我都找不到答案。

我的幻想是刺痛,并告诉我最好的方法是将流的内容复制到其他对象,然后返回该对象以确保流已关闭

解决方法

如果流在try-with块内返回,则流将关闭。

该问题已被提出,请参见此处:
If it safe to return an InputStream from try-with-resource

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。