1. 程式人生 > >Java IO: 字元流的Buffered和Filter

Java IO: 字元流的Buffered和Filter

作者: Jakob Jenkov  譯者: 李璟([email protected])

本章節將簡要介紹緩衝與過濾相關的reader和writer,主要涉及BufferedReader、BufferedWriter、FilterReader、FilterWriter。

BufferedReader

原文連結

BufferedReader能為字元輸入流提供緩衝區,可以提高許多IO處理的速度。你可以一次讀取一大塊的資料,而不需要每次從網路或者磁碟中一次讀取一個位元組。特別是在訪問大量磁碟資料時,緩衝通常會讓IO快上許多。

BufferedReader和BufferedInputStream的主要區別在於,BufferedReader操作字元,而BufferedInputStream操作原始位元組。只需要把Reader包裝到BufferedReader中,就可以為Reader新增緩衝區(譯者注:預設緩衝區大小為8192位元組,即8KB)。程式碼如下:

Reader input = new BufferedReader(new FileReader("c:\\data\\input-file.txt"));

你也可以通過傳遞建構函式的第二個引數,指定緩衝區大小,程式碼如下:

Reader input = new BufferedReader(new FileReader("c:\\data\\input-file.txt"), 8 * 1024);

這個例子設定了8KB的緩衝區。最好把緩衝區大小設定成1024位元組的整數倍,這樣能更高效地利用內建緩衝區的磁碟。

除了能夠為輸入流提供緩衝區以外,其餘方面BufferedReader基本與Reader類似。BufferedReader還有一個額外readLine()方法,可以方便地一次性讀取一整行字元。

BufferedWriter

原文連結

與BufferedReader類似,BufferedWriter可以為輸出流提供緩衝區。可以構造一個使用預設大小緩衝區的BufferedWriter(譯者注:預設緩衝區大小8 * 1024B),程式碼如下:

Writer writer = new BufferedWriter(new FileWriter("c:\\data\\output-file.txt"));

也可以手動設定緩衝區大小,程式碼如下:

Writer writer = new BufferedWriter(new FileWriter("c:\\data\\output-file.txt"), 8 * 1024);

為了更好地使用內建緩衝區的磁碟,同樣建議把緩衝區大小設定成1024的整數倍。除了能夠為輸出流提供緩衝區以外,其餘方面BufferedWriter基本與Writer類似。類似地,BufferedWriter也提供了writeLine()方法,能夠把一行字元寫入到底層的字元輸出流中。值得注意是,你需要手動flush()方法確保寫入到此輸出流的資料真正寫入到磁碟或者網路中。

FilterReader

原文連結

與FilterInputStream類似,FilterReader是實現自定義過濾輸入字元流的基類,基本上它僅僅只是簡單覆蓋了Reader中的所有方法。

就我自己而言,我沒發現這個類明顯的用途。除了建構函式取一個Reader變數作為引數之外,我沒看到FilterReader任何對Reader新增或者修改的地方。如果你選擇繼承FilterReader實現自定義的類,同樣也可以直接繼承自Reader從而避免額外的類層級結構。

FilterWriter

原文連結

內容同FilterReader,不再贅述。