48 votos

Cierre de Streams en Java

¿Por qué necesitamos cerrar un FileInputStream (y arroyos en general) en cualquier caso antes de irnos el programa? ¿Qué pasaría si no? ¿Si el programa se detiene antes de que la secuencia de entrada se cierra explícitamente en el programa, no la corriente también cierra automáticamente?

44voto

duffymo Puntos 188155

Los identificadores de archivo son escasos, recursos finitos. Puede ejecutar fuera de ellos si no se limpian adecuadamente, como conexiones de base de datos.

Si has escrito un pequeño programa con un solo usuario usted puede conseguir lejos con ser descuidado y no se cierre en un bloque finally.

Pero si el uso de esa expresión en una aplicación que tiene muchos usuarios y los identificadores de archivo que podría tener un problema.

"Primero hacemos nuestros hábitos, entonces ellos nos hacen a nosotros." Trato de aplicar las mejores prácticas, incluso cuando no es necesario.

36voto

Jon Skeet Puntos 692016

Sí, cuando el proceso termina se liberará los recursos no administrados. Para InputStreams es fino. Para OutputStreams, usted podría perder un búfer de datos, por lo que usted debe por lo menos descarga la corriente antes de salir del programa.

24voto

Don Branson Puntos 7100

Amigo. Si no se cierra la secuencia, la unidad de la prueba fallará. O al menos, debería. Así, es por eso que usted necesita para cerrarla. ;)

Y mientras que el sistema operativo es casi seguro que limpiar si usted acaba de salir, por lo general, te liberamos más rápido si usted explícitamente cerca de ellos. Además, ¿qué pasa si el código termina en un largo programa que se ejecuta en algún momento en el camino? Luego de que vas a tener problemas y la maldición. :(

Así, es como lavarse las manos después de usar el baño. Finalmente alguien va a pagar el precio si no lo haces. Usted puede conseguir lejos con él por un tiempo, pero aún así es una buena práctica.

10voto

Srikanth Puntos 4119

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

Pensar 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 cerrar tan pronto como haya terminado con él.

También es bueno hacer de ello un hábito. "finalmente" bloque es tu amigo. En el caso de C++, también puede utilizar RAII para gestionar esto de forma automática.

7voto

Joao da Silva Puntos 3626

Especie de. La secuencia está respaldada por un descriptor de archivo del sistema operativo "real", y cuando el proceso termina el OS limpiará cualquier descriptores de ficheros abiertos.

De todos modos, es una buena práctica cerrar siempre sus recursos cuando haya terminado, tan cerca de los arroyos :)

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X