Arquivos grandes de TXT. Usar Scanner ou BufferedReader?

boa tarde pessoal!

Preciso importar arquivos TXT de até 10MB, ler linha por linha e gerar várias Lists de tipos diferentes.

O que seria o mais indicado, sendo que preciso de usabilidade e performance não podendo ter problemas com estouro de memória? [color=green]Scanner [/color]ou [color=green]BufferedReader[/color]?

Também ouvi falar de um tal de [color=blue]FileChannel[/color], alguém sabe pra que serve?
:idea:

Oi!

Uma bela pergunta no qual não sei lhe responder :slight_smile:
Mas vejo muito o uso do BufferedReader, sendo assim, quem sabe né?

Só espero que quem responda tenha certeza do que está dizendo e não no “eu acho que”.
Depois, você poderia testar a perfomance na sua máquina mesmo, fazer a mesma função com Scanner e depois com o Buffer e postar os resultados :slight_smile:

Aqui tem um artigo bacana, mas é de 1999.
Quem sabe seja útil: http://java.sun.com/developer/technicalArticles/Programming/PerfTuning/

Abraços!

nel, muito obrigado, que deus te abençoe.

vou postar os resultados quando obtiver.

quanto ao post inicial, aguardo respostas se puderem me ajudar.

Obrigado.

Fala brow,

Lendo um pouco sobre isso, vi que o pessoal tambem recomenda java.nio.
Tem um post aqui que comenta isso:

Abraco.

Bom dia,

Realizei um teste entre Scanner e BufferedReader, utilizando o profiler do NetBeans. Deixei o java.nio de fora pois não achei um modo prático de ler linha por linha e manipular os dados.

utilizei os seguintes métodos para medir.

[code] private void scan() {
try {
Scanner scan = new Scanner(arquivo.getAbsoluteFile());
while(scan.hasNextLine()){

            scan.nextLine();

        }

        scan.close();

    } catch (FileNotFoundException ex) {
        Logger.getLogger(ImportPisCofins.class.getName()).log(Level.SEVERE, null, ex);
    }
}

private void buffer() {
    try {
        BufferedReader arquivoPisCofins = new BufferedReader(new FileReader(arquivo.getAbsoluteFile()));
        String linha = "";
        try {
            while ((linha = arquivoPisCofins.readLine()) != null) {

            }
        } catch (IOException ex) {
            Logger.getLogger(ImportPisCofins.class.getName()).log(Level.SEVERE, null, ex);
        }



    } catch (FileNotFoundException ex) {
        Logger.getLogger(ImportPisCofins.class.getName()).log(Level.SEVERE, null, ex);
    }
}[/code]

os resultados foram

scanner 464,0 ms (89,9%)
buffer 52,8 ms (10,2%)

acredito que o BufferedReader seja a melhor opção.

segue anexo o arquivo de profiler do NetBeans.