Java BufferedReader 类详细介绍以及用法详解

在本教程中,我们将通过示例了解 Java BufferedReader 类以及相关用法。

在本教程中,我们将通过示例了解 Java FileReader 类以及相关用法。

java.io 包的 BufferedReader 类可以包装其他 Reader 对象,以更有效地以字符为单位读取数据。

BufferedReader 类扩展了抽象类 Reader

BufferedReader 的原理

BufferedReader 内部维护了一个容量为 8192 的字符缓冲区。

在读操作期间, BufferedReader 从磁盘中读取一大块字符并存储在内部缓冲区中,并且从内部缓冲区中单独读取字符。

BufferedReader 减少了与磁盘的通信次数,因此提高了读取的效率。

创建 BufferedReader

我们使用 BufferedReader 的构造方法创建对象,需要通过构造方法的参数指定要包装的 Reader 对象。如下:

FileReader file = new FileReader(String file);
BufferedReader buffer = new BufferedReader(file);

在上面的例子中,我们创建了一个 BufferedReader 对象,它包装了一个 FileReader 对象。

BufferedReader 内部缓冲区的默认大小为 8192 个字符,但是我们也可以指定内部缓冲区的大小。如下:

BufferedReader buffer = new BufferedReader(file, int size);

缓冲区越大,则与磁盘交互的次数越小,但是也会占用更大的内存。这需要我们根据自己的实际情况衡量。

BufferedReader 的方法

FileReader 类完全实现了 Reader 类定义的所有抽象方法。

read() 方法

  • ready() - 检查 Reader 流是否准备好被读取
  • read(char[] array) - 从流中读取字符并存储在指定的数组中
  • read(char[] array, int start, int length) - 读取长度为 length 字符并存储在指定数组 start 开始的位置中

假设我们有一个文件 input.txt 内容如下:

This is a line of text inside the file.

我们使用 FileReader 读取文件内容。

import java.io.FileReader;
import java.io.BufferedReader;

public class Main {
  public static void main(String[] args) {
    char[] array = new char[100];

    try {
      FileReader file = new FileReader("input.txt");
      BufferedReader input = new BufferedReader(file);

      input.read(array);
      System.out.println("Data in the file: ");
      System.out.println(array);

      input.close();
    } catch (Exception e) {
      e.getStackTrace();
    }
  }
}

输出

Data in the file:
This is a line of text inside the file.

在上面的示例中,我们使用创建了一个包装了 FileReader 对象的 BufferedReader 对象,并与文件 input.txt 关联起来。如下:

FileReader file = new FileReader("input.txt");
BufferedReader input = new BufferedReader(file);

然后我们使用 read() 方法读取数据,最后使用 close() 方法关闭了对象。

跳过()方法

skip() 方法丢弃和跳过指定数量的字符。例如,

import java.io.FileReader;
import java.io.BufferedReader;

public class Main {

  public static void main(String[] args) {
    char[] array = new char[100];

    try {
      FileReader file = new FileReader("input.txt");
      BufferedReader input = new BufferedReader(file);

      input.skip(5);
      input.read(array);

      System.out.println("Data after skipping 5 characters:");
      System.out.println(array);

      input.close();
    } catch (Exception e) {
      e.getStackTrace();
    }
  }
}

输出

Data after skipping 5 characters:
is a line of text inside the file.

在上面的例子中,我们使用了 skip() 方法跳过 5 个字符。因此,字符 'T' , 'h' , 'i' , 's'' ' 不会输出。

BufferedReader 的其他方法

方法 描述
ready() 检查流是否准备好被读取
mark() 标记流中已读取数据的位置
reset() 将控制返回到流中设置标记的点