O Javadoc :
Os fluxos têm um método BaseStream.close () e implementam o AutoCloseable, mas quase todas as instâncias do fluxo não precisam ser fechadas após o uso. Geralmente, apenas os fluxos cuja origem é um canal de E / S (como os retornados por Files.lines (Path, Charset)) exigirão o fechamento. A maioria dos fluxos é apoiada por coleções, matrizes ou funções de geração, que não requerem gerenciamento de recursos especiais. (Se um fluxo exigir fechamento, ele poderá ser declarado como um recurso em uma instrução try-with-resources.)
"Quase todos" e "geralmente" são vagos - se você está escrevendo uma biblioteca e abstraindo a fonte do seu Stream dos usuários desse Stream, então você sempre precisa se perguntar: "devo fechar esta?" Os Streams apoiados por IO precisam ser fechados porque as operações do terminal não chamam close
; portanto, efetivamente eu sempre tenho que lembrar / documentar de onde meu Stream vem, ou sempre tenho que close
fazê - lo.
A opção nuclear, eu acho, seria não retornar o Streams dos métodos ou aceitar os parâmetros do Stream, que é um sentimento que foi ecoado por algumas pessoas na equipe do JDK. Acho que isso é excessivamente limitante, considerando a utilidade prática do Streams.
Quais são suas práticas recomendadas para fechar o Streams? Procurei on-line uma resposta para isso de algumas pessoas do JDK que geralmente são ativas em questões semelhantes da comunidade, mas não encontraram nada relevante.