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

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

Спасибо


person FUD    schedule 12.02.2012    source источник


Ответы (1)


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

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


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

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

person Peter Lawrey    schedule 12.02.2012
comment
Я бы не стал. Я бы использовал BufferedReader. Я бы не стал использовать сопоставленный NIO ни для чего, кроме одного большого файла, который должен был быть открыт на протяжении всего времени существования программы, например. самореализуемая база данных. - person user207421; 13.02.2012
comment
@EJP, отличная мысль. Я должен был спросить, нужен ли вам NIO в первую очередь. - person Peter Lawrey; 13.02.2012