当前位置: 首页 > 知识库问答 >
问题:

谁关闭从“使用资源尝试”块中返回的“InputStream”?[副本]

田成仁
2023-03-14

在进行代码审查时,我偶然发现了一些类似于以下内容的代码:

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

try with resources block是否会遵循此参考并尽职尽责地清理它?我在我读过的关于这个语法的任何教程或文档中都找不到答案。

我的spidey感觉很刺激,告诉我更好的做法是将流的内容复制到其他对象,然后返回该对象以确保流是关闭的。

共有1个答案

姜乐语
2023-03-14

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

这个问题已经被问到了,请参阅此处:
如果从try-with-resource返回一个InputStream是安全的

 类似资料:
  • 我知道,如果资源已实现自动关闭,您通过尝试传递的资源将自动关闭。到现在为止,一直都还不错。但是,当我有几个我想要自动关闭的资源时,我该怎么办呢。带插座的示例; 所以我知道套接字将被正确关闭,因为它在try中作为参数传递,但是输入和输出应该如何正确关闭呢?

  • 不管错误情况如何,使用资源尝试是否总是关闭资源?我的意思是考虑以下代码: 会一直关闭吗?我读过Oracle文档,其中说: 无论try语句是正常完成还是突然完成,它都将关闭 因此无论程序正常运行还是抛出异常,它都将起作用。但是,类似或崩溃的情况怎么办?我知道这些条件对块不起作用。那么,使用资源尝试失败的条件是否存在? 这只是我请求的好奇心,谁能说明这一点吗?

  • 根据Oracle文档 try with resources语句是声明一个或多个资源的try语句。资源是一个对象,在程序完成后必须关闭它。try with resources语句确保在语句末尾关闭每个资源。任何实现java的对象。AutoCloseable,其中包括实现java的所有对象。伊奥。可关闭,可用作资源 如果资源未实现AutoCloseable,则无法在try块中声明,必须在主体部分中声明

  • 我正在为面向对象编程的秋季考试做准备,其中一种任务是提供代码输出,这通常包括一些异常处理问题。 现在我的问题是什么时候用资源尝试关闭它的资源,因为我的输出严格依赖于实现AutoCloseable的类的输出。 在提供的代码中,我不明白为什么“close 1”输出在“close 40”之前,或者为什么对象A(40)在这个块的末尾被关闭。是因为A(50)和A(40)是同一类型的吗? 我的主要问题是,Au

  • 我最近和我的教授讨论了如何处理基本的jdbc连接方案。假设我们要执行两个查询,这是他提出的 我不喜欢这种方法,对此我有两个问题: 1.A)我认为,如果在我们做“其他事情”的地方,或在或那么当方法结束时,s1就不会被关闭。我说得对吗? 1.B)教授一直要求我明确关闭结果集(即使声明文档明确表明它将关闭结果集),她说孙建议这样做。有什么理由这样做吗? 现在,我认为这是同样事情的正确代码: 2. A)此

  • 问题内容: 我是的新手,我想知道对于资源来说,我是否必须为每个添加一个,否则它将与上面的代码一起使用 问题答案: 通过在 块中声明所有资源,可以尝试将资源与多个资源一起使用,并且此功能是 Java 7中 引入的,而不是 Java 8中 引入的。如果有多个资源,则可以如下所示 在此示例中,该语句包含两个用分号分隔的声明: ZipFile 和 BufferedWriter 。当它紧随其后的代码块终止时