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?
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?