BufferedReader

介紹

BufferedReader 類是其他 Reader 類的包裝器,有兩個主要用途:

  1. 一個 BufferedReader 為包裹的 Reader 提供緩衝。這允許應用程式一次讀取一個字元而不會產生過多的 I / O 開銷。

  2. BufferedReader 提供一次讀取一行文字的功能。

使用 BufferedReader 的基礎知識

使用 BufferedReader 的正常模式如下。首先,你獲得要從中讀取字元的 Reader。接下來,你將例項化一個包裹 ReaderBufferedReader。然後你讀取字元資料。最後你關閉 BufferedReader,關閉包裹的`讀者。例如:

File someFile = new File(...);
int aCount = 0;
try (FileReader fr = new FileReader(someFile);
     BufferedReader br = new BufferedReader(fr)) {
    // Count the number of 'a' characters.
    int ch;
    while ((ch = br.read()) != -1) {
        if (ch == 'a') {
            aCount++;
        }
    }
    System.out.println("There are " + aCount + " 'a' characters in " + someFile);
}

你可以將此模式應用於任何 Reader

筆記:

  1. 我們使用 Java 7(或更高版本) try-with-resources 確保底層讀者始終關閉。這可以避免潛在的資源洩漏。在早期版本的 Java 中,你將明確關閉 finally 塊中的 BufferedReader

  2. try 區塊內的程式碼幾乎與我們直接從 FileReader 中讀取的程式碼相同。實際上,BufferedReader 的功能與它所包含的 Reader 的功能完全相同。不同之處在於此版本的效率更高。

BufferedReader 緩衝區大小

BufferedReader.readLine() 方法

示例:將檔案的所有行讀入 List

這是通過獲取檔案中的每一行並將其新增到 List<String> 中來完成的。然後返回該列表:

public List<String> getAllLines(String filename) throws IOException {
    List<String> lines = new ArrayList<String>();
    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        String line = null;
        while ((line = reader.readLine) != null) {
            lines.add(line);
        }
    }
    return lines;
}

Java 8 使用 lines() 方法提供了一種更簡潔的方法:

public List<String> getAllLines(String filename) throws IOException {
    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        return br.lines().collect(Collectors.toList());
    }
    return Collections.empty();
}