Quoth the Javadoc :
Gli stream hanno un metodo BaseStream.close () e implementano AutoCloseable, ma quasi tutte le istanze di stream non devono essere chiuse dopo l'uso. In genere, solo gli stream la cui sorgente è un canale IO (come quelli restituiti da Files.lines (Path, Charset)) richiedono la chiusura. La maggior parte dei flussi è supportata da raccolte, matrici o funzioni di generazione, che non richiedono una gestione delle risorse speciale. (Se un flusso richiede la chiusura, può essere dichiarato come risorsa in un'istruzione try-with-resources.)
"Quasi tutti" e "generalmente" sono vaghi - se stai scrivendo una libreria e stai astraggendo la fonte del tuo Stream dagli utenti di quel Stream, allora devi sempre porti la domanda - "dovrei chiudere Questo?" I flussi supportati da IO devono essere chiusi perché le operazioni del terminale non chiamano close
, quindi in modo efficace devo sempre ricordare / documentare da dove proviene il mio Stream o devo sempre close
farlo.
L'opzione nucleare credo sia quella di non restituire gli stream dai metodi o di accettare i parametri Stream, che è un sentimento che è stato fatto eco da alcune persone del team JDK. Trovo che sia eccessivamente limitante considerando l'utilità pratica degli stream.
Quali sono le tue migliori pratiche in merito alla chiusura di stream? Ho cercato online una risposta a questa domanda da parte di alcune persone del JDK che di solito sono attive su simili domande della comunità, ma non hanno trovato nulla di rilevante.