[RESOLVIDO] Ler linha com Java NIO

2 respostas
rso1988

Olá pessoal,

estou tentando utilizar o Java NIO pra manipulação de arquivos e precisava ler uma linha inteira. O que consegui até agora, foi ler somente 1 byte de cada vez com o ByteBuffer. Tentei realizar uma lógica concatenando os caracteres até que encontre o caracter “\n” e assim obter a linha, porém não ficou tão legal e performático.

Existe outro maneira mais correta pra isso?

Valeu!

2 Respostas

E

Há um bom tempo um colega meu resolveu fazer exatamente a mesma coisa que você. Descobrimos, depois de algum tempo, que é mais performático (em termos de ter o programa funcionando logo e dar sempre o resultado correto) você usar um BufferedReader mesmo (e com um buffer grande, isso pode ser ajustado em um dos construtores de BufferedReader que recebe o tamanho do buffer a ser usado), em vez de usar Java NIO, justamente por causa desses tipos de coisas - e olhe que a gente lia buffers enormes com o Java NIO e procurava o \n dentro deles, em vez de ler um byte de cada vez, que é coisa muito,muito tosca.

rso1988

entanglement:
Há um bom tempo um colega meu resolveu fazer exatamente a mesma coisa que você. Descobrimos, depois de algum tempo, que é mais performático (em termos de ter o programa funcionando logo e dar sempre o resultado correto) você usar um BufferedReader mesmo (e com um buffer grande, isso pode ser ajustado em um dos construtores de BufferedReader que recebe o tamanho do buffer a ser usado), em vez de usar Java NIO, justamente por causa desses tipos de coisas - e olhe que a gente lia buffers enormes com o Java NIO e procurava o \n dentro deles, em vez de ler um byte de cada vez, que é coisa muito,muito tosca.

Obrigado pela resposta entanglement,

era exatamente o que eu acabei de provar aqui. Testei o desempenho com o BufferedReader e realmente o desempenho da leitura ficou até melhor do que com a lógica que eu fiz. Achei que utilizando NIO a diferença ia ser absurda, mas não foi a conclusão que cheguei. Vou ficar com o BufferedReader mesmo ! hehehe

Valeu!

Criado 7 de novembro de 2011
Ultima resposta 7 de nov. de 2011
Respostas 2
Participantes 2