Hola a todos Entiendo que si leemos bytes de InputStream y hemos terminado de leer todos los bytes (o no intentamos leer hasta el final de la secuencia), debemos llamar al close() para liberar los recursos del sistema asociados con la transmisión.¿Las transmisiones se cierran automáticamente por error?
Ahora me preguntaba si read bytes y se lanza una java.io.IOException, estoy todavía obligados a llamar close() para liberar recursos del sistema asociados con la corriente?
¿O es cierto que en los errores, las transmisiones se cierran automáticamente, por lo que no es necesario llamar al close()?
Recursos se cierran cuando GCed. ASÍ PUEDES tener un problema que rara vez arroja una excepción, funciona bien. Para la gestión de recursos determinista, close() siempre debe llamarse. –
@PeterLawrey ¿Estás diciendo que es ** porque ** el GC come tranquilamente la IOException lanzada por 'close()' que deberíamos llamar 'close()'? Entonces, si (hipotéticamente) la interfaz de close() no arroja ninguna forma de excepción, no tenemos que llamar a close() cuando una secuencia tiene un error? – Pacerier
Eso es algo a tener en cuenta, sin embargo, es una práctica bastante común ignorar cualquier excepción lanzada por close(). El problema con dejar que el GC lo haga es que puede ejecutar nuestros identificadores de archivos antes de activar un GC que limpia estos recursos. Puede parecer que su programa funciona, pero falla ocasionalmente, lo cual es algo que desea evitar. –