我正在使用BufferReader.readlLine()
逐行處理大量文本文件。BufferedReader性能低下
兩個大小相同的文件130MB,但一個需要40秒才能處理,而其他需要75秒。
我注意到一個文件有180萬行,而其他文件有210萬。但是當我試圖處理一個具有相同大小的300萬行的文件時,需要30分鐘來處理。
所以我的問題是:
這種行爲是因爲尋求緩衝讀者的時間(我想知道如何
BufferedReader
作品或線分析文件行?)有我可以用更快的方式逐行讀取文件的任何方式?
好的朋友,我提供了一些更多的細節。我使用正則表達式將行分成三部分,然後使用SimpleUnsortedWriter
(由Cassandra提供)我將它作爲鍵,列和值寫入某個文件。處理16MB數據後,它將刷新到磁盤。
但是處理邏輯對於所有文件都是一樣的,即使是一個大小爲330MB的文件,但是在100萬個左右的行中沒有更少的文件在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
但不反正幫助。根據我的觀察,當我正在寫入緩衝區(在物理內存中)時,作爲第一個物理內存。寫入緩衝區的次數越來越多,新的寫入需要時間。 (這是我的猜測)
請回復。
請張貼您使用BufferReader的代碼 – razlebe
也許它不必與BufferedReader一起使用,而是使用每行處理。 – Marcelo