чтение строк из файла - PullRequest
       12

чтение строк из файла

5 голосов
/ 12 февраля 2012

Как мне реализовать функцию в java nio, скажем nextLineNio (), которая считывает следующую строку из FileChannel постепенно, так как файл может быть огромным, моей первоначальной идеей было чтение в ByteBuffer размером больше максимальной длины строки, которая моглаСуществуют и читают () из FileChannel, если это необходимо, но проблема, которую я вижу, состоит в том, как мне прочитать последнюю последовательность байтов, которые не заканчиваются символом новой строки.Также, как мне убедиться, что функция nextLineNio () не дает сбоя, поскольку nio api является асинхронным.Любая помощь или уже существующие реализации?

Спасибо

1 Ответ

2 голосов
/ 13 февраля 2012

Как указывает @EJP, вполне вероятно, что вы получите более чем достаточную производительность, используя BufferedReader.readLine () Если вы не знаете, что это не подходит, я бы посоветовал вам упростить задачу.

http://vanillajava.blogspot.com/2011/01/how-slow-can-you-readwrite-files-in.html


Я бы отображал в памяти весь файл и искал новые строки, чтобы получить строку за раз.Это избавляет от необходимости беспокоиться о размерах буфера или многократных чтениях (или проблеме чтения слишком много)

NIO по умолчанию синхронный , файловый ввод-вывод является только синхронным (до Java 7).Чтобы сделать сокеты асинхронными, вы должны вызвать специальный установщик.

...