当前位置: 首页 > 面试题库 >

我是否必须在try-with-resources块中关闭终止的流式查询结果?

柴宏阔
2023-03-14
问题内容

在Spring Data JPA文档中,它说明了有关流的信息:

Stream可能包装了基础数据存储的特​​定资源,因此必须在使用后关闭。您可以使用close()方法或使用Java 7 try-with-
resources块来手动关闭Stream。

参见:http :
//docs.spring.io/spring-
data/jpa/docs/1.10.1.RELEASE/reference/html/#repositories.query-
streaming

如果我使用forEach,count或其他终端操作处理流,则应该已经将其关闭(并且不再重用),并且不必将流包装在其他try-
resources块中(假设我的块没有)不会抛出任何异常),或者我在这里错了吗?


问题答案:

在的Java
API
描述如下这个话题:

流具有BaseStream.close()方法和实现AutoCloseable,但是实际上几乎所有流实例在使用后都不需要关闭。通常,只有源是IO通道的流(例如,由IO通道返回的Files.lines(Path, Charset))流才需要关闭。大多数流都由不需要特殊资源管理的集合,数组或生成函数支持。(如果流确实需要关闭,则可以在try-with-
resources语句中被声明为资源。)

另请注意以下API Files.lines(Path, Charset))

返回的数据流封装Reader.如果需要的文件系统资源的及时处置,在try-与资源结构应该被用来确保数据流的close流操作完成后调用方法。

底线是:如果流对应的资源在正常情况下需要在使用后关闭(例如IO),则在try-with-resources语句中使用它。



 类似资料:
  • 我有两个方法可以返回列表中字符串的长度,如下所示; 和 当我尝试使用任何一种方法的结果流时; 或 我明白了 现在我意识到在尝试资源块中使用流并不常见。但在我的真实代码中,我使用

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

  • 问题内容: 我使用的是用这样的: 我只关门了。我是否还需要关闭()? 问题答案: 不,您只需要关闭最外面的流。它将一直委托给包装的流。 但是,您的代码包含一个概念上的失败,应该在中发生关闭,否则当代码在打开和关闭之间引发异常时,它永远不会关闭。 例如 (请注意,我更改了代码以 引发 异常,以便您了解问题的原因,该异常即包含有关问题原因的详细信息) 或者,当您已经在使用Java 7时,也可以使用AR

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

  • 一本关于Java的初学者书中有以下代码。这本书也很好地解释了异常,并且由于我理解了异常是如何工作的,我得到了一个关于下面代码的问题。 由于某种原因,如果FileWriter类抛出异常,将不会被执行。因此,我认为关闭writer对象的最佳位置是在finally块中。甚至在此之前,我已经看到过许多这样编写的代码,其中资源将在try块本身中关闭。我认为这样做是没有意义的。只有在没有例外的情况下,资源才会

  • 主要内容: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引入了一个新的构造: 语句,用于更好的异常处理。 如果没有这个构造,开发人员必须编写大量冗余和难看的代码。 如果开发人员忘记正确