BufferedReader
是 Java 中用于高效读取字符流的一个类,它位于 java.io
包中。它主要的作用是通过缓冲区来提高读取字符的效率,尤其是在读取大量数据时。使用 BufferedReader
可以减少 I/O 操作次数,提高程序的性能,特别是在读取文本文件时。
1. BufferedReader
的基本作用
BufferedReader
的核心功能是通过内部缓冲区存储一部分数据,从而减少对底层设备的 I/O 操作次数。这样,可以有效地提高读取数据的效率,因为每次读取数据时,不必每次都访问磁盘或其他慢速的输入设备。
基本流程:
- 缓冲区读取:
BufferedReader
会先将输入流中的一部分数据加载到内存中的缓冲区中。 - 按需读取:当读取数据时,会先从缓冲区读取,而不是每次都访问底层设备。
- 减少 I/O 操作:这大大减少了 I/O 操作的次数,提高了性能。
2. 构造方法
BufferedReader
有几个常用的构造方法:
BufferedReader(Reader in)
:将一个字符流包装成带缓冲区的BufferedReader
,它会读取底层流(如FileReader
)中的数据并存入缓冲区。BufferedReader(Reader in, int sz)
:指定缓冲区的大小,sz
是缓冲区的大小,默认为 8KB。
3. 常用方法
read()
:读取单个字符,返回读取到的字符(以 Unicode 编码表示),如果已经到达流的末尾,则返回-1
。int character = bufferedReader.read();
read(char[] cbuf)
:一次读取一组字符,返回读取的字符数。如果已经到达流的末尾,则返回-1
。char[] buffer = new char[1024]; int length = bufferedReader.read(buffer);
readLine()
:读取一行文本(不包括行结束符)。当读到流的末尾时,返回null
。String line = bufferedReader.readLine();
close()
:关闭流,释放系统资源。调用BufferedReader
的close()
方法时,它会同时关闭底层的输入流。bufferedReader.close();
4. 使用示例
示例 1:读取文件内容
假设你有一个文本文件 example.txt
,你想使用 BufferedReader
来读取它的内容:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
BufferedReader bufferedReader = null;
try {
// 创建一个 BufferedReader,传入 FileReader
bufferedReader = new BufferedReader(new FileReader("example.txt"));
String line;
// 按行读取文件内容
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close(); // 关闭流
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
示例 2:读取文件内容(使用 try-with-resources 语句)
Java 7 引入了 try-with-resources 语句,自动关闭实现了 AutoCloseable
接口的资源(如 BufferedReader
)。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
// 使用 try-with-resources 自动关闭资源
try (BufferedReader bufferedReader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. 为什么要使用 BufferedReader
?
BufferedReader
与直接使用 FileReader
相比,有显著的性能优势:
- 提高性能:直接读取文件(每次读取一个字符)会导致大量的磁盘 I/O 操作,性能较差。而
BufferedReader
会先从文件中读取一块数据到内存中(缓冲区),然后按需读取,提高了效率。 - 按行读取:
BufferedReader
提供了readLine()
方法,可以很方便地按行读取文件,处理文本文件时非常常见。 - 节省资源:减少了对底层设备的访问,减轻了 I/O 操作的负担。
6. 总结
BufferedReader
是一个高效读取字符流的工具,常用于读取文本文件。- 它通过缓冲区减少了多次 I/O 操作,提高了读取性能。
- 常用方法包括:
read()
,readLine()
,read(char[] cbuf)
, 和close()
等。 - 在读取文件时,推荐使用
BufferedReader
代替直接使用FileReader
,尤其是在处理大文件或频繁 I/O 时。
如果你需要进一步了解 BufferedReader
或其他 I/O 类的使用,欢迎继续提问!
发表回复