【发布时间】:2014-09-24 18:50:17
【问题描述】:
我无法真正理解 Java 中 FileReader 和 BufferedReader 类的用途。
在 docs.oracle 中,建议将缓冲阅读器包装在 FileReader 对象周围,因为直接使用 FileReader 效率不高。成本或间接费用从何而来?
假设我有一个文本文件,我想使用这些类将其读入我的 java 程序:
我使用 FileReader 和 BufferedReader
FileReader fileReader = new FileReader(new File("text.txt)"); // probably correct???
BufferedReader bufferedReader = new BufferedReader(fileReader);
1) FileReader 对象在这里的任务是什么?它是否负责通过操作系统向文件发出 I/O 请求,然后读取字节?这样做的成本是多少?
FileReader 发出多个 I/O 请求是真的吗?还是FileReader 对象必须逐个字符地将字节转换为字符时的成本?
2) BufferedReader-object的任务——参考上面最后一句话。 - BufferedReader 对象的作用是简单地缓冲传入字节数组,然后将它们转换为字符?
非常感谢您的回答
编辑:首先感谢收到的答案。但我应该提到它正是我研究过的这个文档。称我为愚蠢之类的 - 但“每个读取请求”是什么意思。 每个读取请求何时发出?多久一次?
通常,每个由 Reader 发出的读取请求都会导致对底层字符或字节流发出相应的读取请求。因此,建议将 BufferedReader 包裹在 read() 操作可能成本高昂的任何 Reader 周围,例如 FileReaders 和 InputStreamReaders。例如,
这主要是为什么提出这个问题 - 听起来 FileReader 会导致大量 I/O 请求,这会减慢 erverthing 的速度。
【问题讨论】:
标签: java bufferedreader filereader overhead