目錄:系統學習 Java IO---- 目錄,概覽html
BufferedReader 類構造器接收一個 Reader 對象,爲 Reader 實例提供緩衝。 緩衝能夠加快 IO 的速度。 BufferedReader 不是一次從網絡或磁盤讀取一個字符,而是一次讀取一個更大的塊。 這一般要快得多,特別是對於磁盤訪問和更大的數據量。java
相似於 BufferedInputStream ,主要區別在於 BufferedReader 讀取字符(文本),而 BufferedInputStream 讀取原始字節。數組
除了向Reader實例添加緩衝外,BufferedReader 的行爲與 Reader 很是類似。 BufferedReader 有一個額外的方法,即 readLine() 方法。 若是您須要一次讀取一行輸入,則此方法很方便。
String line = bufferedReader.readLine();
網絡
BufferedWriter 類構造器接收一個 Writer 對象,爲 Writer 實例提供緩衝。 緩衝能夠加快 IO 的速度。 BufferedWriter 不是一次寫一個字符到網絡或磁盤,而是一次寫一個更大的塊。 這一般要快得多,特別是對於磁盤訪問和更大的數據量。函數
能夠包裝 FileReader 的 BufferedReader 。 BufferedReader 將從 FileReader 讀取一個字符塊(一般爲 char 數組)。 所以,從 read() 返回的每一個字符都今後內部數組返回。 當數組被讀完時,BufferedReader 將一個新的數據塊讀入數組等。學習
能夠設置 BufferedReader/BufferedWriter 在內部使用的緩衝區大小。默認大小是 8192 的字符數組。code
一個簡單的使用實例以下:htm
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 類旨在從 Reader 解析數據時使用,它能夠包裝一個 Reader 對象。 PushbackReader 容許將讀取的字符推回到 Reader 中下次調用 read() 時,將再次讀取這些字符。通俗來說,PushbackReader 提供了一種可能,讓咱們能讀取流的部份內容而不破壞流。對象
PushbackReader 的工做方式與 PushbackInputStream 很是類似,只是 PushbackReader 適用於字符,而 PushbackInputStream 適用於字節。因此請參考前面的文章,再也不贅述了。下面提供一個簡單的例子:blog
PushbackReader pushbackReader = new PushbackReader(new FileReader("c:\\data\\input.txt")); int data = pushbackReader.read(); pushbackReader.unread(data);
有一個構造函數 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); // 推回操做都是將內容複製到推回緩衝區的前面 reader.unread(97); // 97 是字符 'a' 的 int 值,推回 2 個 'a' // reader.unread(97); // 會失敗並拋出異常,由於最多隻能推回2個字符 reader.read(bytes); System.out.println(bytes); // aa3456789 reader.close(); } }
當完成從 PushbackReader 讀取字符後,記得關閉它。 關閉 PushbackReade還將關閉 PushbackReader 正在讀取的 Reader 實例。
FilterReader 是用於實現本身的過濾閱讀器的基類。 基本上它只是覆蓋了 Reader 中的全部方法。 與 FilterInputStream 同樣,我認爲這個類沒有明智的目的。 我沒法看到這個類實際上添加或更改了 Reader 中的任何行爲,只是它在構造函數中須要一個 Reader 。 若是想選擇擴展此類,則能夠直接擴展 Reader 類,並避免層次結構中的額外類。FilterWriter 一樣。