У меня есть файл, в который данные продолжают добавляться. Я использую Java для чтения этого файла и обработки данных. Чтобы получить последние данные, я сохраняю смещение до того места, где я прочитал файл, и продолжаю чтение с этого смещения, когда следующий процесс java будет запущен.
RandomAccessFile f = new RandomAccessFile("file.txt","r");
f.seek(offset)
Проблема здесь в производительности. Это примерно в 300 раз медленнее, чем BufferedReader. Можно ли возобновить чтение с определенной строки, используя BufferedReader?
import java.io.RandomAccessFile;
import java.io.FileReader;
import java.io.IOException;
public class ReadFileExample {
public static void main(String[] args) {
RandomAccessFile objReader = null;
try {
String strCurrentLine;
long startTime = System.currentTimeMillis();
objReader = new RandomAccessFile("auditlog-2018-12-21.txt", "r");
while ((strCurrentLine = objReader.readLine()) != null) {
}
System.out.println(System.currentTimeMillis()-startTime);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (objReader != null)
objReader.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
Чтение 30M файла, содержащего 100 000 строк, занимает 12 с, а замена RandomAccessFile на BufferReader занимает менее 400 мс.