¿Por qué usar BufferedReader en este caso?
-
06-09-2019 - |
Pregunta
¿Cuál es la diferencia entre usar un BufferedReader alrededor del StringReader en el siguiente código vs utilizando sólo el StringReader? Al cargar el DOM en la línea 2 de ambos ejemplos, parece que el BufferedReader no es necesario?
InputSource is = new InputSource(new StringReader(html));
Document dom = XMLResource.load(is).getDocument();
VS
InputSource is = new InputSource(new BufferedReader(new StringReader(html)));
Document dom = XMLResource.load(is).getDocument();
Solución
En este caso particular, no veo ningún beneficio. En general, hay dos beneficios:
- El método
readLine()
sólo se define enBufferedReader
en lugar deReader
(irrelevante aquí) -
BufferedReader
reduce IO donde las llamadas individuales al lector subyacente son potencialmente caro (es decir, las llamadas menos gruesos son más rápidas que las porciones de los más pequeños) - de nuevo, irrelevante paraStringReader
Cortar y pegar fallar?
Otros consejos
EDIT: Mi respuesta original a continuación. El siguiente no es relevante en este caso, ya que el lector tamponada está terminando un StringReader, que envuelve una cadena. Así que no hay almacenamiento temporal a realizar, y el BufferedReader parece ser redundante. Usted podría hacer un argumento para el uso de las mejores prácticas / consistentes, pero sería muy tenue.
Posiblemente el resultado de un copiar / pegar, o tal vez una refactor IDE impulsada demasiado!
BufferedReader intentará leer de una manera más óptima.
Es decir, se leerá trozos grandes de datos de una sola vez (en una cantidad configurable), y luego poner a disposición cuando sea necesario. Esto reducirá el número de lecturas de disco (etc.) a expensas de algún uso de la memoria.
Para citar el Javadoc:
En general, cada solicitud de lectura hace de un lector hace una lectura correspondiente petición que se hizo de la subyacente carácter o secuencia de bytes. Está por lo tanto recomendable envolver una BufferedReader en torno a cualquier lector cuya Read () operaciones pueden ser costosos, tales como FileReaders y InputStreamReaders
La versión BufferedReader se copió de un código que utiliza para leer de un FileReader?