为什么 Files.lines(和类似的 Streams)没有自动关闭?
流的 javadoc 声明:
流具有 BaseStream.close() 方法并实现 AutoCloseable,但几乎所有流实例在使用后实际上并不需要关闭。通常,只有源是 IO 通道的流(例如 Files.lines(Path,Charset)返回的流)才需要关闭。大多数流由集合、数组或生成函数提供支持,这些函数不需要特殊的资源管理。(如果流确实需要关闭,则可以在 try-with-resources 语句中将其声明为资源。
因此,绝大多数情况下,可以在单行流中使用流,例如但对于其他资源支持的流,必须使用 try-with-resources 语句,否则会泄漏资源。collection.stream().forEach(System.out::println);
Files.lines
这让我觉得容易出错和没有必要。由于 Streams 只能迭代一次,因此在我看来,不存在输出在迭代后立即不应关闭的情况,因此实现应该在任何终端操作结束时隐式调用 close。我错了吗?Files.lines