Ответ 1
Как правило, вообще не нужно закрывать потоки. Вам нужно только закрыть потоки, которые используют ресурсы ввода-вывода.
Потоки имеют метод
BaseStream.close()
и реализуютAutoCloseable
, но почти все экземпляры потока фактически не нужно закрывать после использования. Как правило, только потоки, источник которых является каналом ввода-вывода (например, те, которые возвращаютсяFiles.lines(Path, Charset)
), требуют закрытия. Большинство потоков поддерживаются коллекциями, массивами или генерирующими функциями, которые не требуют специального управления ресурсами. (Если поток требует закрытия, он может быть объявлен как ресурс в инструкции try-with-resources.)
Если вам нужно закрыть поток, лучше всего использовать инструкцию try-with-resources:
try ( Stream<String> stream = Files.lines(path, charset) ) {
// do something
}