Для обработки журналов мое приложение должно читать текстовые файлы по строкам.
Сначала я использовал функцию readLine() BufferedReader, но я читал в Интернете, что BufferedReader работает медленно при чтении файлов.
Впоследствии я попытался использовать FileInputStream вместе с FileChannel и MappedByteBuffer, но в этом случае нет функции, аналогичной readLine(), поэтому я ищу свой текст для разрыва строки и обрабатываю его:
try {
FileInputStream f = new FileInputStream(file);
FileChannel ch = f.getChannel( );
MappedByteBuffer mb = ch.map(FileChannel.MapMode.READ_ONLY, 0L, ch.size());
byte[] bytes = new byte[1024];
int i = 0;
while (mb.hasRemaining()) {
byte get = mb.get();
if(get == '\n') {
if(ra.run(new String(bytes)))
cnt++;
for(int j = 0; j<=i; j++)
bytes[j] = 0;
i = 0;
}
else
bytes[i++] = get;
}
} catch(Exception ex) {
ex.printStackTrace();
}
Я знаю, что это, вероятно, не лучший способ его реализовать, но когда я просто прочитал текстовый файл в байтах, он в 3 раза быстрее, чем при использовании BufferedReader, но вызов new String(bytes)
создает новую строку и делает программу еще медленнее, чем при использовании BufferedReader.
Поэтому я хотел спросить, что является самым быстрым способом чтения текстового файла по строкам? Некоторые говорят, что BufferedReader - единственное решение этой проблемы.
P.S.: ra
- это экземпляр RunAutomaton из библиотеки dk.brics.Automaton.