Java - lendo de um arquivo. Fluxo de entrada vs. leitor

Em toda implementação Java que vejo lendo de um arquivo, quase sempre vejo um leitor de arquivos usado para ler linha por linha. Meu pensamento seria que isso seria terrivelmente ineficiente porque requer uma chamada de sistema por linha.

O que eu tenho feito em vez disso é usar um fluxo de entrada e pegar os bytes diretamente. Nos meus experimentos, isso é significativamente mais rápido. Meu teste foi um arquivo 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>

Isso dá um resultado de:

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

Então, por que as pessoas usam leitores em vez de fluxos?

Se eu tenho um método que leva um arquivo de texto e retorna uma String que contém todo o texto, é necessariamente melhor fazê-lo usando um fluxo?

questionAnswers(3)

yourAnswerToTheQuestion