Quoth le Javadoc :
Les flux ont une méthode BaseStream.close () et implémentent AutoCloseable, mais presque toutes les instances de flux n'ont pas besoin d'être fermées après utilisation. Généralement, seuls les flux dont la source est un canal IO (tels que ceux renvoyés par Files.lines (Path, Charset)) devront être fermés. La plupart des flux sont soutenus par des collections, des tableaux ou des fonctions de génération, qui ne nécessitent aucune gestion de ressources spéciale. (Si un flux doit être fermé, il peut être déclaré en tant que ressource dans une instruction try-with-resources.)
"Presque tout" et "généralement" sont vagues - si vous écrivez une bibliothèque et que vous extrayez la source de votre Stream des utilisateurs de ce Stream, alors vous devez toujours vous poser la question - "devrais-je fermer cette?" Les Streams soutenus par IO doivent être fermés car les opérations du terminal n'appellent pas close
, donc effectivement je dois toujours me souvenir / documenter d'où vient mon Stream, ou je dois toujours le faire close
.
L'option nucléaire, je suppose, serait de ne pas renvoyer les Streams des méthodes ou d'accepter les paramètres de Stream, ce qui a été repris par certaines personnes de l'équipe JDK. Je trouve cela trop limitatif compte tenu de l'utilité pratique des Streams.
Quelles sont vos meilleures pratiques concernant la fermeture de Streams? J'ai cherché en ligne une réponse à cette question de la part de certaines personnes du JDK qui sont généralement actives sur des questions communautaires similaires, mais n'ont rien trouvé de pertinent.