streams procesamiento parte examples datos con collection and java stream

procesamiento - Cierre de secuencias en Java



stream java examples (6)

¿Por qué tenemos que cerrar un FileInputStream (y las transmisiones en general) en cualquier caso antes de abandonar el programa? ¿Qué pasaría de otra manera? Si el programa se detiene antes de que la secuencia de entrada se cierre explícitamente en el programa, ¿la transmisión tampoco se cierra automáticamente?


Además de la respuesta de Jon, generalmente es una buena idea cerrar cualquier recurso.

Piensa en una conexión de base de datos. Su base de datos no puede tener infinitas conexiones abiertas, en este caso, cuando no la necesita, es mejor que la cierre tan pronto como haya terminado con ella.

También es bueno hacer de esto un hábito. "finalmente" bloquear es tu amigo. En el caso de C ++, también puede usar RAII para administrar esto automáticamente .


Los identificadores de archivo son recursos escasos y finitos. Puede agotarlas si no las limpia adecuadamente, al igual que las conexiones de bases de datos.

Si ha escrito un pequeño programa con un solo usuario, puede salirse con la suya siendo descuidado y sin cerrar en un bloque final.

Pero si terminas usando ese idioma en una aplicación que tiene muchos usuarios y manejadores de archivos, es posible que tengas un problema.

"Primero hacemos nuestros hábitos, luego ellos nos hacen". Intento aplicar las mejores prácticas incluso cuando no son necesarias.


Más o menos La secuencia está respaldada por un descriptor de archivo de sistema operativo "real", y cuando el proceso termina, el sistema operativo limpiará cualquier descriptor de archivo abierto.

De todos modos, es una buena práctica cerrar siempre tus recursos cuando hayas terminado, así que cierra las transmisiones :)


Sí, cuando el proceso termina, se liberarán los recursos no administrados. Para InputStreams esto está bien. Para OutputStreams, puede perder datos almacenados en el búfer, por lo que al menos debe vaciar la secuencia antes de salir del programa.


Si no cierra las transmisiones, puede tener problemas para volver a abrirlas. Esto es especialmente cierto si están colgando del extremo de los enchufes.

Cerrar una secuencia también asegura que los datos se descarguen a través de la transmisión si quedan datos para enviar.


Tipo. Si no cierra la transmisión, la prueba de la unidad fallará. O al menos debería. Entonces, es por eso que necesitas cerrarlo. ;)

Y mientras que el sistema operativo casi con certeza se limpiará si acaba de salir, generalmente se liberarán más rápido si los cierra de manera explícita. Además, ¿qué pasa si tu código termina en un programa de larga duración en el futuro? Entonces tendrán problemas y te maldecirán. :(

Entonces, es como lavarse las manos después de usar el baño. Eventualmente, alguien pagará el precio si no lo haces. Puede salirse con la suya por un tiempo, pero sigue siendo una buena práctica.