2009-06-02 10 views
5

¿Cuál es la diferencia entre usar un BufferedReader alrededor de StringReader en el siguiente código vs usar únicamente StringReader? Al cargar el DOM en la línea 2 de ambos ejemplos, parece que el BufferedReader no es necesario.¿Por qué utilizar BufferedReader en este caso?

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(); 
+0

Utilizando el BufferedReader en realidad ser marginalmente más lenta (y hacer el código más complicado) –

Respuesta

18

En este caso particular, no veo ningún beneficio. En general, hay dos beneficios:

  • El oh-tan-práctico readLine() método sólo se define en BufferedReader en lugar de Reader (no es relevante aquí)
  • BufferedReader reduce IO donde las llamadas individuales al lector subyacente son potencialmente costosa (es decir, menos llamadas gruesas son más rápidas que muchas pequeñas). De nuevo, irrelevante para StringReader

¿Fallo al cortar y pegar?

1

La versión BufferedReader se copió de un código que utiliza para leer de un FileReader?

4

EDITAR: Mi respuesta original a continuación. El siguiente no es relevante en este caso, ya que el lector de memoria intermedia está envolviendo un StringReader, que envuelve un String. Por lo tanto, no se debe realizar el almacenamiento en búfer, y el BufferedReader parece ser redundante. Usted podría presentar un argumento para usar las mejores prácticas/consistentes, pero sería bastante 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 del disco (etc.) a expensas de un poco de uso de la memoria.

citar el Javadoc:

En general, cada solicitud de lectura hecha de un lector provoca una correspondiente solicitud lea estar hecha de la corriente carácter o byte subyacente. Es tanto, es recomendable envolver un BufferedReader en torno a cualquier lector cuya lectura() las operaciones pueden ser costosos, tales como FileReaders y InputStreamReaders

+0

Y esto es relevante para un StringReader cómo exactamente? ;) –

+0

Sí. Tomo tu punto. Respondí eso demasiado rápido :-) –

Cuestiones relacionadas