Только потоки, источником которых является канал ввода-вывода, такой как Файлы.строки (путь, кодировка)
должны быть закрыты.
Прочитайте это Потоковые JavaDocs
Потоки имеют метод BaseStream.close() и реализуют автоматическое закрытие, но почти все экземпляры потока на самом деле не нужно закрывать после использования. Как правило, только потоки, источником которых является канал ввода-вывода (например, потоки, возвращаемые файлами.строки (Путь, кодировка)), требуют закрытия. Большинство потоков поддерживаются коллекциями, массивами или генерирующими функциями, которые не требуют специального управления ресурсами. (Если поток действительно требует закрытия, он может быть объявлен как ресурс в инструкции try-with-resources.)
1. Для обычного потока, подобного этому, экземпляр потока не нужно закрывать после использования.
package com.mkyong; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class Java8StreamExample { public static void main(String[] args) { Streamstream = Stream.of("A", "B", "C"); List filter = stream.filter(x -> !x.equalsIgnoreCase("B")) .collect(Collectors.toList()); // no need close the stream. //stream.close(); System.out.println(filter); // [A, C] } }
2. Для потока, источником которого является канал ввода-вывода, закройте его с помощью попробуйте с помощью ресурсов
package com.mkyong; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.stream.Collectors; import java.util.stream.Stream; public class Java8StreamIO { public static void main(String[] args) { String path = "c:\\projects\\app.log"; // auto close try (Streamlines = Files.lines(Paths.get(path))) { String content = lines.collect(Collectors.joining(System.lineSeparator())); } catch (IOException e) { e.printStackTrace(); } } }
Рекомендации
Оригинал: “https://mkyong.com/java/java-8-should-we-close-the-stream-after-use/”