【发布时间】:2019-05-22 23:20:39
【问题描述】:
我正在使用以下 2 段代码来读取一个大文件。
这个使用FileReader:
File file = new File("/Users/Desktop/shakes.txt");
FileReader reader = new FileReader(file);
int ch;
long start = System.currentTimeMillis();
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
long end = System.currentTimeMillis();
以下使用BufferedReader:
File file = new File("/Users/Desktop/shakes.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
int ch;
long start = System.currentTimeMillis();
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
long end = System.currentTimeMillis();
查看BufferedReader 的文档:
因此,建议将 BufferedReader 包裹在 read() 操作可能成本高昂的任何 Reader 周围,例如 FileReaders 和 InputStreamReaders。如果没有缓冲,每次调用 read() 或 readLine() 都可能导致从文件中读取字节,转换为字符,然后返回,这可能非常低效。
鉴于此文档和 BufferedReader 类的默认缓冲区大小 8192,使用 BufferedReader 读取文件的总时间不应该更快吗?目前,这两段代码在我的机器上运行时间约为 3000 毫秒。但是,如果我在 BufferedReader 中使用“readLine”,性能会大大提高(~200 毫秒)。
对我缺少的东西的想法?难道不期望即使使用 'read()' 方法,BufferedReader 应该提供比从 FileReader 读取更好的性能吗?
【问题讨论】:
标签: java io bufferedreader filereader