BufferedReader构造函数对FileReader的期望是什么

我需要了解这两个类之间的区别以及它们如何相互协作。 据我所知,FileReader一次从一个文件中读取字符,BufferedReader读取大量数据并将其存储在缓冲区中,从而使其更快。

为了使用BufferedReader,我必须提供一个FileReader。 如果BufferedReader类以不同方式读取文件,它如何使用FileReader? 这是否意味着BufferedReader使用FileReader,因此在幕后,字符仍然一次只能读取一个字符? 我想我的问题是BufferedReader类如何使用FileReader类。

首先, BufferedReader采用Reader而不是FileReader (尽管后者被接受)。

Reader抽象类有几个read()方法。 有一个read-one-character版本以及两个版本,它们将一个字符块读入一个数组。

如果您一次只读取单个字符或小块,则使用BufferedReader是有意义的。

考虑以下两个请求:

 char ch1 = fileReader.read(); char ch2 = bufferedReader.read() 

第一个将转到底层文件,而第二个将很可能从BufferedReader的内部缓冲区满足。

BufferedReader使用FileReader.read(char[] cbuf, int off, int len)方法,如果您希望一次获得多个字符,也可以读取该方法。

BufferedReader使您可以更轻松地读取所需的大小并且仍然高效。 如果您总是在读取大块,那么丢弃BufferedReader可能会稍微高效一些。

FileReader能够读取块,而不是一次只读取1个字符。 它inheritance了Reader的read(char [])方法,因此您可以读取传入的char []数组的大小.BufferedReader只是包装FileReader,因此当您在BufferedReader上调用read()方法时,它在内部处理缓冲区并在其底层Reader上调用read()方法。 您使用BufferedReader的主要原因之一是您可以使用readLine()方法。 除了FileReader之外,BufferedReader还可以包装其他读者(例如InputStreamReader)。

BufferedReader在任何阅读器上添加一层缓冲。 关键是,与以无缓冲方式读取文件,套接字或其他内容相比,读取更加优化。 它还增加了一些方便的方法,除非它为你预取了一块,否则它将无法正常工作。 在FileReader的情况下,你必须读取一大块数据,直到找到’\ n’能够执行类似BufferedReader.readLine()的操作,然后你必须保留其余的数据用于下一次读操作(更不用说当你必须等待一个缓慢的数据源将它传递给你时所需的工作)。