目錄:系統(tǒng)學習 Java IO---- 目錄煌妈,概覽
BufferedReader
BufferedReader 類構造器接收一個 Reader 對象儡羔,為 Reader 實例提供緩沖。 緩沖可以加快 IO 的速度璧诵。 BufferedReader 不是一次從網絡或磁盤讀取一個字符汰蜘,而是一次讀取一個更大的塊。 這通常要快得多腮猖,特別是對于磁盤訪問和更大的數據量鉴扫。
類似于 BufferedInputStream ,主要區(qū)別在于 BufferedReader 讀取字符(文本)澈缺,而 BufferedInputStream 讀取原始字節(jié)。
除了向Reader實例添加緩沖外炕婶,BufferedReader 的行為與 Reader 非常相似姐赡。 BufferedReader 有一個額外的方法,即 readLine() 方法柠掂。 如果您需要一次讀取一行輸入项滑,則此方法很方便。
String line = bufferedReader.readLine();
BufferedWriter
BufferedWriter 類構造器接收一個 Writer 對象涯贞,為 Writer 實例提供緩沖枪狂。 緩沖可以加快 IO 的速度。 BufferedWriter 不是一次寫一個字符到網絡或磁盤宋渔,而是一次寫一個更大的塊州疾。 這通常要快得多,特別是對于磁盤訪問和更大的數據量皇拣。
可以包裝 FileReader 的 BufferedReader 严蓖。 BufferedReader 將從 FileReader 讀取一個字符塊(通常為 char 數組)。 因此氧急,從 read() 返回的每個字符都從此內部數組返回颗胡。 當數組被讀完時,BufferedReader 將一個新的數據塊讀入數組等吩坝。
可以設置 BufferedReader/BufferedWriter 在內部使用的緩沖區(qū)大小毒姨。默認大小是 8192 的字符數組。
一個簡單的使用實例如下:
File file = new File("D:\\test\\1.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write("string from BufferedWriter");
writer.close();
int bufferSize = 8 * 1024; // 可選的緩沖字符數組大小
BufferedReader reader = new BufferedReader(new FileReader(file), bufferSize);
int data = reader.read();
while (data != -1) {
System.out.print((char) data); // string from BufferedWriter
data = reader.read();
}
reader.close();
PushbackReader
PushbackReader 類旨在從 Reader 解析數據時使用钉寝,它可以包裝一個 Reader 對象弧呐。 PushbackReader 允許將讀取的字符推回到 Reader 中下次調用 read() 時闸迷,將再次讀取這些字符。通俗來講泉懦,PushbackReader 提供了一種可能稿黍,讓我們能讀取流的部分內容而不破壞流。
PushbackReader 的工作方式與 PushbackInputStream 非常相似崩哩,只是 PushbackReader 適用于字符巡球,而 PushbackInputStream 適用于字節(jié)。所以請參考前面的文章邓嘹,不再贅述了酣栈。下面提供一個簡單的例子:
PushbackReader pushbackReader = new PushbackReader(new FileReader("c:\\data\\input.txt"));
int data = pushbackReader.read();
pushbackReader.unread(data);
設置 PushbackReader 的后推限制
有一個構造函數 public PushbackReader(Reader in, int size)
可以設置 PushbackReader 的后推限制,如果不設置這個值汹押,那默認為 1 矿筝,這個值很重要,表示了最多能往回推多少個字符棚贾,如果讀取了 10 個字符窖维,但是后退限制為 1 的話,那總共只能推回 1 個字符妙痹,剩下的 9 個字符沒辦法推回去铸史,流就被破壞了。
一個使用示例如下:
public class PushbackReaderExample {
public static void main(String[] args) throws IOException {
int limit = 2; // 可選怯伊,最多只能推回 2 個字符琳轿,默認值是 1
File file = new File("D:\\test\\1.txt"); // 文件內容是 123456789
PushbackReader reader = new PushbackReader(new FileReader(file), limit);
char[] bytes = new char[9]; // 讀取 9 個字符;
reader.read(bytes);
System.out.println(bytes); // 123456789
reader.unread(97); // 推回操作都是將內容復制到推回緩沖區(qū)的前面
reader.unread(97); // 97 是字符 'a' 的 int 值耿芹,推回 2 個 'a'
// reader.unread(97); // 會失敗并拋出異常崭篡,因為最多只能推回2個字符
reader.read(bytes);
System.out.println(bytes); // aa3456789
reader.close();
}
}
close()
當完成從 PushbackReader 讀取字符后,記得關閉它吧秕。 關閉 PushbackReade還將關閉 PushbackReader 正在讀取的 Reader 實例琉闪。
FilterReader/FilterWriter
FilterReader 是用于實現(xiàn)自己的過濾閱讀器的基類。 基本上它只是覆蓋了 Reader 中的所有方法寇甸。
與 FilterInputStream 一樣塘偎,我認為這個類沒有明智的目的。 我無法看到這個類實際上添加或更改了 Reader 中的任何行為拿霉,只是它在構造函數中需要一個 Reader 吟秩。 如果想選擇擴展此類,則可以直接擴展 Reader 類绽淘,并避免層次結構中的額外類涵防。FilterWriter 同樣。