java - 谁关闭了从 try with resources 块中返回的“InputStream”?
问题描述
在进行代码审查时,我偶然发现了一些看起来像这样的代码:
try (InputStream stream = new BufferedInputStream(resource)) {
return stream;
}
其中resource
在方法的其他地方定义。请注意,这是示例代码,在现实生活中,重要的stream
是关闭以免泄漏资源。
我的问题是:资源尝试会stream
代表我关闭吗?一旦stream
返回给调用者,他们可能会尝试用它做一些有用的事情,或者上帝保佑,在一个永远不会被清理的全局变量中保存对它的引用。
资源块的尝试是否会遵循此参考并尽职尽责地清理它?在我读过的有关此语法的任何教程或文档中,我都找不到答案。
我的蜘蛛侠感觉很刺痛,告诉我最好的办法是将流的内容复制到其他对象,然后返回该对象以确保流已关闭。
解决方案
如果 Stream 在 try-with 块内返回,它将被关闭。
已经问过这个问题,请参见此处:
如果从 try-with-resource 返回 InputStream 是安全的
推荐阅读
- c - 为什么是阶乘 13!不适用于 unsigned long long int?
- arduino - 如何将 attiny85 与源文件集成?专门将 Timer0 更改为 Timer1 以避免定时器使用冲突
- c# - 如何将文本文件转换为csv
- angular - Angular 7 测试 - 使用去抖动时间模拟输入事件
- java - 我怎样才能在我的 android 应用程序中获得所有聊天内容
- amazon-web-services - AWS Cognito 身份池能否将用户重定向到外部 SAML IdP 进行登录?
- javascript - 右侧滑入两张图片后,下一页为空白
- fullcalendar - 在 FullCalendar 中查看分钟视图
- python-3.x - 在 pyspark 中创建派生列时如何解决以下问题?
- laravel - Laravel whereHas ManyToMany 关系,然后按第三个表中的值排序