Sí, llamando close
en el exterior más Reader
va a ser suficiente
El artículo Java I/O Streams en el Sun Developer Network tiene una sección sobre Corriente del encadenamiento que dice lo siguiente:.
FileOutputStream fos = new FileOutputStream("myfile.out");
CryptOutputStream cos = new CryptOutputStream(fos);
GZIPOutputStream gos = new GZIPOutputStream(cos);
[...]
[...] cuando se cierra encadenados secuencias, solo tiene que cerrar la clase de secuencia más externa porque la llamada close()
se filtra automáticamente a través de todas las clases encadenadas; en el ejemplo anterior, simplemente llamaría al método close()
en la clase GZIPOutputStream
.
Por lo tanto, en este caso, uno sólo tiene que llamar close
en el BufferedReader
.
Como dtsazza already mentioned, la Java API Specification para la clase BufferedReader
dice que el método BufferedReader.close
liberará los recursos subyacentes:
Cierra el flujo y libera los recursos del sistema asociados a ella. [...]
Entonces, uno puede inferir que cualquier Reader
s subyacente, aunque no lo indique explícitamente.
Por supuesto, si el constructor 'BufferedReader' lanza, no podrá cerrar el' FileReader' subyacente (que no puede especificar el juego de caracteres de todos modos, por lo que es un poco desesperado sí mismo). –