Я обрабатываю несколько текстовых файлов построчно, используя BufferReader.readlLine()
.
Два файла имеют одинаковый размер 130 МБ, но один обрабатывается за 40 секунд, а другой занимает 75 секунд.
Я заметил, что в одном файле 1,8 миллиона строк, а в другом - 2,1 миллиона.Но когда я попытался обработать файл с 3,0 миллионами строк одинакового размера, это заняло 30 минут.
Поэтому мой вопрос:
Это поведение из-завремя поиска буфера чтения (я хочу знать, как BufferedReader
работает или анализирует файл строка за строкой?)
Есть ли способ прочитать файл строка за строкой вболее быстрый путь?
Хорошо, друзья, я предоставляю некоторые подробности.
Я разделяю строку на три части, используя регулярное выражение, а затем SimpleUnsortedWriter
(предоставленоКассандра) Я записываю его в какой-то файл в виде ключа, столбца и значения.После обработки данных размером 16 МБ они сбрасываются на диск.
Но логика обработки одинакова для всех файлов, даже один файл размером 330 МБ, но без строк, около 1 миллиона, обрабатывается в течение 30 секунд.В чем может быть причина?
deviceWriter = new SSTableSimpleUnsortedWriter(
directory,
keyspace,
"Devices",
UTF8Type.instance,
null,
16);
Pattern pattern = Pattern.compile("[\\[,\\]]");
while ((line = br.readLine()) != null)
{
//split the line i n row column and value
long timestamp = System.currentTimeMillis() * 1000;
deviceWriter .newRow(bytes(rowKey));
deviceWriter .addColumn(bytes(colmName), bytes(value), timestamp);
}
Изменились -Xmx256M to -Xmx 1024M
, но это никак не помогает.
Обновление: По моим наблюдениям, когда я пишув буфер (в физической памяти), как нет.Количество записей в буфер увеличивается, новые записи занимают время.(Это мое предположение)
Пожалуйста, ответьте.