java – 流上的终端操作是否关闭源?

前端之家收集整理的这篇文章主要介绍了java – 流上的终端操作是否关闭源?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Do terminal operations close the stream?2
请考虑以下代码
Path directory = Paths.get(/* some directory */);
Files.list(directory).forEach(System.out::println);

终端操作(像forEach)是否关闭已打开的底层文件

请参阅Files.list的javadoc的相关部分:

The returned stream encapsulates a DirectoryStream. If timely disposal of file system resources is required,the try-with-resources construct should be used to ensure that the stream’s close method is invoked after the stream operations are completed.

如果不调用Stream.close(),那么在生成可维护代码的时候,最好的方法就是调用它?

解决方法

终端操作符不会自动关闭流.考虑这个代码
Stream<Path> list = Files.list(directory).onClose(() -> System.out.println("Closed"));
list.forEach(System.out::println);

这不打印“已关闭”.

但是,以下内容打印为“已关闭”:

try (Stream<Path> list = Files.list(directory).onClose(() -> System.out.println("Closed"))) {
    list.forEach(System.out::println);
}

所以最好的方法是使用try-with-resources机制.

猜你在找的Java相关文章