gpt4 book ai didi

java - FileReader 和 BufferedReader 的作用——为什么要 wrapp FileReader?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:25:19 25 4
gpt4 key购买 nike

我无法真正理解 Java 中 FileReaderBufferedReader 类的用途。

在 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 请求,从而减慢速度。

最佳答案

来自 oracle 文档:

In general, each read request made of a Reader causes a corresponding read request to be made of the underlying character or byte stream. It is therefore advisable to wrap a BufferedReader around any Reader whose read() operations may be costly, such as FileReaders and InputStreamReaders. For example,

BufferedReader in = new BufferedReader(new FileReader("foo.in")); will buffer the input from the specified file. Without buffering, each invocation of read() or readLine() could cause bytes to be read from the file, converted into characters, and then returned, which can be very inefficient.

因此,正如文档明确建议的那样,将 BufferedReader 包裹在 FileReader 周围可以防止从文件中反复读取数据。 BufferedReader 缓冲 输入。

关于java - FileReader 和 BufferedReader 的作用——为什么要 wrapp FileReader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25082394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com