Java 文件读取器工作的BufferedReader

Java 文件读取器工作的BufferedReader,java,Java,我对BufferedReader如何与FileReader一起工作有疑问。研究了stackoverflow和Google上的大多数帖子,但我的疑问仍然没有消除。这是我的第三天,我穿上这件衣服是为了理解……!:) 这是: 我的理解是,当我们使用下面的代码片段 BufferedReader in = new BufferedReader(new FileReader("foo.in")); FileReader读取字节数据并放入缓冲区。这里缓冲区由BufferedReader创建,Buff

我对BufferedReader如何与FileReader一起工作有疑问。研究了stackoverflow和Google上的大多数帖子,但我的疑问仍然没有消除。这是我的第三天,我穿上这件衣服是为了理解……!:)

这是:

我的理解是,当我们使用下面的代码片段

 BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));
FileReader读取字节数据并放入缓冲区。这里缓冲区由BufferedReader创建,BufferedReader的实例从该缓冲区读取

这让我想到,因为这篇文章说,BufferedReader本身不存储任何东西,因为如果是这样的话,那么我认为BufferedReader做两件事,一件创建一个缓冲区,另一件创建一个BufferedReader实例,从该缓冲区读取。。。!有道理吗

我的第二个疑问是,BufferedReader可以用来避免IO操作,这意味着避免从磁盘读取字节,然后转换为字符,然后发出的耗时工作。因此,为了克服这个问题,可以使用BufferedReader一次读取大量数据。这里让我想到,当BufferedReader被包装在FileReader周围时,FileReader流首先被读取,然后数据被传递到BufferedReader。那要花多少钱

我的理解是,BufferedReader阅读器很有帮助,因为它从缓冲区(内存)中读取数据,所以,与其同时做同样的事情,即从磁盘读取字节并同时进行转换,不如先将所有字节放入缓冲区或内存,然后再从那里读取,因为读取速度很快,也可以转换为字符。这是我通过在线阅读得出的结论,但我不是100%同意,因为即使在放入缓冲区后也不会跳过任何步骤,那么它如何缩短时间范围呢?:(

我真的被这些弄糊涂了,有人能帮我更准确地理解这一点吗

FileReader
读取字节数据

否。它构造一个
文件输入流
输入读取器
,并从后者读取字符

并放入缓冲区

放入调用方的缓冲区

这里BufferedReader由
BufferedReader
创建,BufferedReader的实例从该缓冲区读取

这让我想到,因为这篇文章说,BufferedReader本身不存储任何东西

那篇文章中的那句话完全是胡说八道,任何其他来源也是如此。当然,它存储数据。它是一个缓冲区。请参阅Javadoc,特别是下面的语句:“从字符输入流读取文本,缓冲字符[我的重点]以便有效读取字符、数组和行。”

因为如果是这样的话,我想
BufferedReader
做两件事,一件创建一个缓冲区,另一件创建一个
BufferedReader
的实例,谁从缓冲区读取…!有意义吗

没有,但你的消息来源也没有。你上面的第一个直觉是正确的

我的第二个疑问是,
BufferedReader
可以用来避免IO操作,这意味着避免从磁盘读取字节,然后转换为字符,然后发出的耗时工作。因此,为了克服这个问题,BufferedReader可以用于一次读取大数据块。这让我想到,当BufferedReader是围绕着FileReader的,然后FileReader流首先读取数据,然后将数据传递给BufferedReader。那么它需要多少大数据块

通过向
FileReader.read()
提供大缓冲区

我的理解是,BufferedReader阅读器很有帮助,因为它从缓冲区(内存)中读取数据,所以,与其同时做同样的事情,即从磁盘读取字节并同时进行转换,不如先将所有字节放入缓冲区或内存,然后再从那里读取,因为读取速度很快,也可以转换为字符。这是我通过在线阅读得出的结论,但我不是100%同意,因为即使在放入缓冲区后也不会跳过任何步骤,那么它如何缩短时间范围呢?:(


从磁盘中逐个字符读取的步骤被跳过。从磁盘文件中读取一个块的效率与读取一个字节的效率差不多,系统调用本身也很昂贵。

消除混淆的最好方法是自己读取BufferedReader、FileReader等的源代码。@StephenC,Can y请分享我在哪里可以找到这个的源代码?看看Timir说的。或者谷歌的“java.io.FileReader source”就是一个例子。当你下载Oracle JDK时,库源代码也包含在一个ZIP文件中,或者(我想)作为Linux包提供。