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

手动关闭try-with-resource

郏扬
2023-03-14

假设我使用的是一个文档不完整的第三方库,它没有源代码。库的方法之一接受InputStream来加载各种数据。

不幸的是,Java规范(据我所知)没有提到如果在try-with-resource中手动关闭资源会发生什么。有没有人碰巧知道?

共有1个答案

楚钊
2023-03-14

这将完全取决于资源本身的实现。try-with-resource语句对于在finally块中调用close()(并保留异常等)来说,“只是”语法上的糖(但也很好)。

只要流支持close()被调用两次--我希望大多数实现都这样做,InputStream的约定也要求这样做--就绝对没有问题。

请注意,您将处于与将一个资源封装在另一个资源中的情况完全相同的情况,例如。

try (InputStream input = new FileInputStream(...)) {
   try (Reader reader = new InputStreamReader(input, ...)) {
       ...
   }
}

或者使用单个try-with-resources语句:

try (InputStream input = new FileInputStream(...);
     Reader reader = new InputStreamReader(input, ...)) {
   ...
}

在这两种情况下,都将有两个finally块,因此首先调用reader.close(),然后调用input.close()-但reader.close()仍然会关闭input

 类似资料:
  • 我在块中创建了数量可变的对象。在任何退出点,我都希望关闭所有分配的资源。 我可以想象自己写一些东西来做这件事,但是有没有类似于Python的Contextlib的现有实用程序。将关闭分配的资源的ExitStack?我希望它看起来像这样: (注意:这不是这个问题,因为我不知道我会提前准备多少资源。)。 嘿,close投票者我不是在要求一个库,我是在问你如何安全地关闭动态数量的s,如果有语言功能,很好

  • 问题内容: 声纳给出了一个错误,应该将其关闭。我需要修改以下代码才能使用。我该怎么做呢? 问题答案: 当前,代码尚不准备处理异常-您丢失了finally块来关闭打开的流。而且,当然,您是对的-使用try-with-resources解决了这个问题:

  • 问题内容: 使用try-with-resources语句关闭资源时,是否可以忽略抛出的异常? 例: 还是应该继续关闭? 问题答案: 我在钱币开发邮件列表中找到了这个答案:http : //mail.openjdk.java.net/pipermail/coin- dev/2009-April/001503.html 5. close方法的某些失败可以安全地忽略(例如,关闭已打开以供读取的文件)。

  • 本文向大家介绍Java使用 try-with-resources 实现自动关闭资源的方法,包括了Java使用 try-with-resources 实现自动关闭资源的方法的使用技巧和注意事项,需要的朋友参考一下 1、 在Java1.7之前,我们需要通过下面这种方法, 在finally中释放资源,这种方法有点繁琐。 2、在java1.7之后,可以使用try-with-resources实现自动关闭资

  • 我正在Sonarqube上运行我的JDBC代码。我的代码有问题。 上面说3号线和9号线有阻塞问题。使用try-with-resources或在“finally”子句中关闭此“PreparedStatement”。我不明白这一点。我不知道如何解决这个问题

  • 主要内容:Java SE 7:Try-With-Resources基础知识,Java SE 7:Try-With-Resources规则,Java SE 9:Try-With-Resources改进在这篇文章中,我们将讨论Java SE 9中的一些改进语句。现在让我们开始学习这个构造。 Java SE 7:Try-With-Resources基础知识 Java SE 7引入了一个新的构造: 语句,用于更好的异常处理。 如果没有这个构造,开发人员必须编写大量冗余和难看的代码。 如果开发人员忘记正确