Java - leyendo de un archivo. Flujo de entrada vs. lector

En cada implementación de Java que veo de la lectura de un archivo, casi siempre veo un lector de archivos que se usa para leer línea por línea. Mi pensamiento sería que esto sería terriblemente ineficiente porque requiere una llamada al sistema por línea.

Lo que había estado haciendo en su lugar es usar un flujo de entrada y capturar los bytes directamente. En mis experimentos, esto es significativamente más rápido. Mi prueba fue un archivo de 1MB.

<code>    //Stream method
    try {
        Long startTime = new Date().getTime();

        InputStream is = new FileInputStream("test");
        byte[] b = new byte[is.available()];
        is.read(b);
        String text = new String(b);
        //System.out.println(text);

        Long endTime = new Date().getTime();
        System.out.println("Text length: " + text.length() + ", Total time: " + (endTime - startTime));

    }
    catch (Exception e) {
        e.printStackTrace();
    }

    //Reader method
    try {
        Long startTime = new Date().getTime();

        BufferedReader br = new BufferedReader(new FileReader("test"));
        String line = null;
        StringBuilder sb = new StringBuilder();
        while ((line = br.readLine()) != null) {
            sb.append(line);
            sb.append("\n");
        }
        String text = sb.toString();

        Long endTime = new Date().getTime();
        System.out.println("Text length: " + text.length() + ", Total time: " + (endTime - startTime));

    }
    catch (Exception e) {
        e.printStackTrace();
    }
</code>

Esto da un resultado de:

<code>Text length: 1054631, Total time: 9
Text length: 1034099, Total time: 22
</code>

Entonces, ¿por qué la gente usa lectores en lugar de flujos?

Si tengo un método que toma un archivo de texto y devuelve una cadena que contiene todo el texto, ¿es necesariamente mejor hacerlo usando una secuencia?

Respuestas a la pregunta(3)

Su respuesta a la pregunta