Java缓冲读取器

示例

介绍

该BufferedReader班是以外的包装Reader是有两个主要目的类:

  1. ABufferedReader为包装的提供缓冲Reader。这允许应用程序一次读取一个字符,而不会产生过多的I / O开销。

  2. 一个BufferedReader用于一次读取文本行提供的功能。

使用BufferedReader的基础

使用a的正常模式BufferedReader如下。首先,获得Reader要从中读取字符的。接下来,您实例化一个BufferedReader包装了的Reader。然后,您读取字符数据。最后,关闭,BufferedReader然后关闭包装好的`Reader。例如:

File someFile = new File(...);
int aCount = 0;
try (FileReader fr = new FileReader(someFile);
     BufferedReader br = new BufferedReader(fr)) {
    // 计算“ a”字符的数量。
    int ch;
    while ((ch = br.read()) != -1) {
        if (ch == 'a') {
            aCount++;
        }
    }
    System.out.println("有 " + aCount + " 'a' characters in " + someFile);
}

您可以将此模式应用于任何 Reader

笔记:

  1. 我们使用Java 7(或更高版本)的try-with-resources来确保基础阅读器始终处于关闭状态。这样可以避免潜在的资源泄漏。在Java的早期版本中,您将显式关闭BufferedReaderinfinally块。

  2. 该try块内的代码实际上与直接从读取的代码相同FileReader。实际上,BufferedReader与Reader包装的函数完全一样的函数也会起作用。不同之处在于此版本的效率更高。

BufferedReader缓冲区的大小

该方法BufferedReader.readLine()

示例:将文件的所有行读入列表

这是通过获取文件中的每一行并将其添加到中来完成的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();
}