Quoth el Javadoc :
Las transmisiones tienen un método BaseStream.close () e implementan AutoCloseable, pero casi todas las instancias de transmisiones no necesitan cerrarse después del uso. En general, solo las transmisiones cuya fuente es un canal IO (como las que devuelve Files.lines (Path, Charset)) deberán cerrarse. La mayoría de las transmisiones están respaldadas por colecciones, matrices o funciones generadoras, que no requieren una administración especial de recursos. (Si una secuencia requiere cierre, se puede declarar como un recurso en una declaración de prueba con recursos).
"Casi todos" y "en general" son vagos: si está escribiendo una biblioteca y está abstrayendo la fuente de su Stream de los usuarios de ese Stream, entonces de todos modos siempre tiene que hacerse la pregunta: "¿debería cerrar? ¿esta?" Los Streams respaldados por IO deben cerrarse porque las operaciones de terminal no llaman close
, por lo que siempre tengo que recordar / documentar de dónde viene mi Stream, o siempre tengo que close
hacerlo.
Supongo que la opción nuclear sería no devolver Streams de los métodos o aceptar los parámetros de Stream, que es un sentimiento que ha sido reflejado por algunas personas en el equipo de JDK. Me parece que es demasiado limitante teniendo en cuenta la utilidad práctica de Streams.
¿Cuáles son sus mejores prácticas para cerrar Streams? Busqué en línea una respuesta a esto de algunas de las personas de JDK que generalmente están activas en preguntas similares de la comunidad, pero no encontraron nada relevante.