對於日誌處理,我的應用程序需要逐行讀取文本文件。 首先,我使用了BufferedReader函數readLine(),但是我在網上讀到BufferedReader在讀取文件時速度很慢。
後來我嘗試了與FileChannel和MappedByteBuffer一起使用的FileInputStream但在這種情況下,有沒有類似的readLine(功能),所以我搜索我的文字的斷行,並對其進行處理:在Java中逐行讀取文本文件的最快方法
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();
}
我知道這可能不是實現它的好方法,但是當我以字節讀取文本文件時,使用BufferedReader的速度比使用BufferedReader快3倍,但調用new String(bytes)
會創建一個新的String,並且在使用BufferedReader時使程序更慢。
所以我想問一下按行讀取文本文件的最快方法是什麼?有人說BufferedReader是解決這個問題的唯一方法。
P.S .: ra
是來自dk.brics.Automaton庫的RunAutomaton的一個實例。
是BufferedReader真的太慢了嗎?如果您必須使用Java編碼,那麼它可能是最乾淨,最易維護的解決方案之一。 – 2011-04-27 06:45:17
如果'BufferedReader'對於您的應用程序來說真的太慢了,您應該考慮不要使用java或其他託管語言...... _(但我懷疑是這種情況)_ – ordag 2011-04-27 12:28:13
[亞倫](http:// stackoverflow。 com/users/460201/aaron)的答案即將被刪除,因此我將其作爲評論放在這裏:「檢查[此鏈接](http://nadeausoftware.com/articles/) 2008/02/java_tip_how_read_files_quickly)out。它包含了各種方法的速度比較。「 – 2014-07-14 09:29:44