【发布时间】:2016-12-06 11:52:16
【问题描述】:
如果我们使用像list.stream().filter(....).collect(..)..... 这样的Java 8 Stream 什么时候关闭这个流?
作为下一个例子,我们关闭流是好的做法吗?
Stream<String> stream = list.stream();
String result = stream.limit(10).collect(Collectors.joining(""));
stream.close();
【问题讨论】:
-
来自文档:流具有 BaseStream.close() 方法并实现 AutoCloseable,但几乎所有流实例在使用后实际上不需要关闭。通常,只有源为 IO 通道的流(例如由 Files.lines(Path, Charset) 返回的流)才需要关闭。大多数流由集合、数组或生成函数支持,不需要特殊的资源管理。 (如果流确实需要关闭,可以在 try-with-resources 语句中将其声明为资源。)
-
流一般不需要关闭。只有一些访问资源的流(例如
DirectoryStream)需要关闭。最好的方法是使用try-with-resources 语句。 -
1.由于它们很懒所以没有被初始化,2.它们实现了
AutoCloseable,因此打开的流在空闲时会被关闭 -
这是怎么重复的?这个问题询问流应该是否被关闭,另一个问题询问它们是否自动关闭 在某些特定情况下。如果你有可能因为金色徽章而单方面关闭问题,至少你应该先仔细阅读它们。
-
我有一个类似的问题,似乎在阅读了其中一些回复之后,调用 close 方法是一种浪费,原因有很多。第一个是您必须在每个关闭方法中放置额外的 try-catch 块,这可能很耗时。第二个是任何 close 方法都可能只是终止资源,因此您可以通过使用 mystream = null; 获得相同的效果;陈述。第三是流不直接从文件本身读取,因此文件不会像其他语言一样被锁定打开,因此无需关闭它们。我就是这么理解的
标签: java java-8 java-stream