Квот Javadoc :
Потоки имеют метод BaseStream.close () и реализуют AutoCloseable, но практически все экземпляры потоков на самом деле не нужно закрывать после использования. Как правило, закрывать будут только те потоки, источником которых является канал ввода-вывода (например, те, которые возвращены Files.lines (Path, Charset)). Большинство потоков поддерживаются коллекциями, массивами или генерирующими функциями, которые не требуют специального управления ресурсами. (Если поток требует закрытия, он может быть объявлен как ресурс в инструкции try-with-resources.)
«Почти все» и «в целом» являются расплывчатыми - если вы пишете библиотеку и абстрагируете источник вашего потока от пользователей этого потока, то вам все равно придется задать себе вопрос - «должен ли я закрыть это?" Потоки, поддерживаемые IO, должны быть закрыты, потому что терминальные операции не вызывают close
, поэтому мне всегда нужно либо помнить / документировать, откуда поступает мой поток, либо я всегда должен close
это делать .
Ядерная опция, я думаю, состояла бы в том, чтобы не возвращать Streams из методов или принимать параметры Stream, что является мнением, которое повторяют некоторые люди из команды JDK. Я считаю это чрезмерным ограничением, учитывая практическую полезность потоков.
Каковы ваши лучшие практики закрытия потоков? Я искал в Интернете ответ на этот вопрос от некоторых людей из JDK, которые обычно работают над похожими вопросами сообщества, но не находят ничего актуального.