在Spring Data JPA文档中它说的是关于流:
Stream可能会包装底层数据存储特定资源,因此必须在使用后关闭。您可以使用close()方法手动关闭Stream,也可以使用Java 7 try-with-resources块。
如果我使用forEach
,计数或其他终端操作处理流,它应该已经关闭(并且不能再次重复使用),我不必将流包装在其他try-resources中 - 块(假设我的块没有抛出任何异常),或者我错了吗?
答案 0 :(得分:10)
Java APIs描述如下主题:
Streams有一个
public void setActors(ArrayList<JiraActors> actors) { this.actors = actors; }
方法并实现BaseStream.close()
,但几乎所有的流实例实际上都不需要在使用后关闭。通常,只有源为IO通道的流(例如AutoCloseable
返回的流将需要关闭。大多数流由集合,数组或生成函数支持,不需要特殊的资源管理。要求关闭,可以在try-with-resources语句中将其声明为资源。)
另请注意Files.lines(Path, Charset))
的API:
返回的流封装
Files.lines(Path, Charset))
如果需要及时处理文件系统资源,则应使用try-with-resources构造来确保在流操作之后调用流的Reader.
方法完成了。
底线是:如果流对应的资源在正常情况下需要在使用后关闭(如IO),请在try-with-resources语句中使用它。