问题描述
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