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();
}