Java I/O 效能可透過標準緩衝類別提升,原理同作業系統緩衝請求:讀取時優先從記憶體取資料,寫入時暫存記憶體等待更多資料再批次寫入磁碟。
直接使用 FileWriter 逐筆寫入 1000 次:
Writer writer = new FileWriter(new File("file.txt"));
for (int i=0; i<1000; i++) {
writer.write(""+i);
writer.write(" ");
}
writer.close();
Apple PowerBook 測試:首次 180ms,後續 90ms (JIT 編譯效應)。
改用 BufferedWriter 包裝:
Writer writer = new BufferedWriter(new FileWriter(new File("file.txt")));
// 相同迴圈寫入
writer.close();
執行時間降為 63ms。BufferedWriter 決定何時發送寫入呼叫,可用 flush() 強制輸出。大量小量輸出時預設緩衝效能提升顯著。
BufferedWriter、BufferedReaderBufferedOutputStream、BufferedInputStream緩衝不限於檔案系統,任何 Reader/Writer、InputStream/OutputStream 皆可包裝緩衝提升速度。