Java中常用的IO函数——BufferedReader和FileReader的区别
Java 中常用的 IO 函数包含 BufferedReader 和 FileReader,他们都是在 Java.io 包下的核心类,用于读取文件中的数据。这两个类虽然都是基于字符读取,但是它们之间有着很大的区别。
1. 性能和效率方面
BufferedReader 比 FileReader 性能更好。BufferedReader 是一个在 FileReader 上加了一个缓存区,使得读取数据时可以读取一定量的数据到缓存区,然后处理缓存区中的数据,这样可以减少 I/O 操作,从而提高读取文件的效率。
FileReader 只是读取单个字符,每次读取一个字符,然后释放,因此,每次的读取都要调用系统的的文件读取接口,频繁的 I/O 操作会消耗大量的时间和系统的资源。
因此,相对于 FileReader,BufferedReader 有着更好的性能和效率。
2. 能力方面
FileReader 只能读取字符数据,不能读取数据的其它类型,而 BufferedReader 可以读取所有类型的数据,包括字符、数字或者其他类型的,能够满足用户的不同需求。
3. 使用方面
使用 FileReader 通常需要结合使用 try-catch-finally 语句,以捕捉可能抛出的异常:
try {
FileReader fileReader = new FileReader(fileName);
int ch = 0;
while ((ch = fileReader.read()) != -1) {
System.out.print((char) ch);
}
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
而使用 BufferedReader,可以使用 try-with-resource 语句,自动关闭 BufferedReader 对象:
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
4. 缓存大小
默认情况下,BufferedReader 的缓存大小为 8192 个字符,可以使用 BufferedReader 构造函数来指定缓存大小,通常以 2 的 N 次方作为缓存大小,例如 8192、16384、32768 等。
FileReader 并没有缓存大小的概念,每次读取时都是一个字符一个字符的读取,因此不能指定缓存大小。
总结:
FileReader 是一个基于字符读取的,每次读取一个字符,然后释放,需要频繁的 I/O 操作,相对效率较低。而 BufferedReader 是在 FileReader 上加了一个缓冲区,读取一定量的数据到缓存区,然后处理缓存区中的数据,因此相对效率更高。
此外,BufferedReader 还能够读取数据的不同类型,使用起来也更加方便,在使用时能够更好的节省系统开销。因此,在实际开发中,应该尽量使用 BufferedReader 作为文件读写时的首选。
