欢迎访问宙启技术站
智能推送

Java中常用的IO函数——BufferedReader和FileReader的区别

发布时间:2023-06-26 04:37:37

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 作为文件读写时的首选。