谁关闭了从 try with resources 块中返回的“InputStream”?

Who closes an `InputStream` that is Returned from within a try with resources block?

在进行代码审查时,我偶然发现了一些如下所示的代码:

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

其中 resource 是在方法的其他地方定义的。 请注意,这是示例代码,在现实生活中,重要的是 stream 关闭以免泄漏资源

我的问题是:try with resources 块会代表我关闭 stream 吗?一旦 stream 被 return 发送给调用者,他们可能会尝试用它做一些有用的事情,或者上帝禁止,在一个永远不会被清理的全局变量中保存对它的引用。

try with resources 块是否会遵循此引用并尽职地清理它?我在阅读过的有关此语法的任何教程或文档中都找不到答案。

我的狡猾感觉很刺痛,告诉我最好的办法是将流的内容复制到某个其他对象,然后 return 该对象以确保流已关闭。

如果 Stream 在 try-with 块内返回,它将被关闭。

这个问题已经有人问过,请看这里:
If it safe to return an InputStream from try-with-resource