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

在Spring Data JPA文档中它说的关于流:

Stream可能会包装底层数据存储特定资源,因此必须在使用后关闭。 您可以使用close()方法手动关闭Stream,也可以使用Java 7 try-with-resources块。

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

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

Java API描述了这个主题如下:

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

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

返回的流封装了一个Reader. 如果需要及时处理文件系统资源,则应使用try-with-resources构造来确保在流操作完成后调用流的close方法。

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