Classe mais perfomática possível para leitura randômica de arquivo texto

2 respostas
dreampeppers99

Tenho o seguinte cenário:

Arquivos de texto puro que variam de 164MB (100.000 linhas) à 1.6GB (1.000.000 linhas)!
Hoje faço a leitura dessa forma!

RandomAccessFile rnd = new RandomAccessFile(new File(caminhoArquivo), "r"); System.out.println(rnd.readLine()); System.out.println(rnd.readLine()); rnd.seek(10); //possibilidade de pular linhas System.out.println(rnd.readLine());

Acredito que possa haver outra forma (pelo pacote nio só encontre como fazé-lo com leitura sequencial [usando os channels]) mais perfromática, conhecem?

Obrigado desde já!

2 Respostas

T

Você precisa ler o arquivo sequencialmente, ou você precisa localizar uma linha qualquer dentro do arquivo?
As linhas têm comprimento fixo?
Qual é o seu requisito?

Se você precisa localizar uma linha qualquer dentro do arquivo, e você sabe que as linhas têm comprimento fixo (por exemplo, um arquivo CNAB), você pode fazer algumas contas, e continuar a usar RandomAccessFile. Essa seria a maneira mais simples.

Se você não sabe o tamanho de cada linha, e precisa acessar ao acaso uma linha qualquer dentro do arquivo (não sequencialmente), você tem então de ler primeiramente todo o arquivo e criar um segundo arquivo, só com os números e deslocamentos das linhas (use um DataOutputStream e writeInt para gastar 4 bytes por número de linha). . Então você procura a linha 5.678.893 (por exemplo) no segundo arquivo, que diríamos ser um arquivo “de índice”, para achar o deslocamento correspondente à linha 5.678.893.

dreampeppers99

Você precisa ler o arquivo sequencialmente, ou você precisa localizar uma linha qualquer dentro do arquivo?
Uma linha qualquer dentro do arquivo! (randômico mesmo)
As linhas têm comprimento fixo?
Sim

Então o RandomAccessFile seria o ideal no mínimo mais simples! Penso que na performance ele não deve perder muito para as outras classes (do pacote nio), estou certo?

Criado 6 de julho de 2009
Ultima resposta 6 de jul. de 2009
Respostas 2
Participantes 2