Для обработки журнала моему приложению необходимо читать текстовые файлы построчно.
Сначала я использовал функцию 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 - единственное решение этой проблемы.
PS: ra
- это экземпляр RunAutomaton из библиотеки dk.brics.Automaton.