我需要了解这两个类之间的区别以及它们如何相互协作。据我所知,FileReader一次从一个文件中读取字符,BufferedReader读取大量数据并将其存储在缓冲区中,从而使其更快。
为了使用BufferedReader,我必须提供一个FileReader。如果BufferedReader类以不同方式读取文件,它如何使用FileReader?这是否意味着BufferedReader使用FileReader,因此在幕后,字符仍然一次只能读取一个字符?我想我的问题是BufferedReader类如何使用FileReader类。
答案 0 :(得分:6)
BufferedReader使用FileReader.read(char[] cbuf, int off, int len)
方法,如果您希望一次获得多个字符,也可以阅读该方法。
BufferedReader使您可以更轻松地读取所需的大小并且仍然高效。如果您总是在读取大块,那么放弃BufferedReader可能会稍微高效。
答案 1 :(得分:5)
首先,BufferedReader
需要Reader
,而不是FileReader
(虽然后者已被接受)。
Reader
抽象类有几种read()
方法。有一个read-one-character版本以及两个版本,它们将一个字符块读入一个数组。
如果您一次只读取单个字符或小块,则使用BufferedReader
才有意义。
考虑以下两个请求:
char ch1 = fileReader.read();
char ch2 = bufferedReader.read()
第一个将转到底层文件,而第二个将很可能从BufferedReader
的内部缓冲区满足。
答案 2 :(得分:2)
FileReader能够读取块,而不是一次只读取1个字符。它继承了Reader
的read(char [])方法,因此您可以读取传入的char []数组的大小.BufferedReader只是包装FileReader,因此当您调用read()方法时在BufferedReader上,它在内部处理缓冲区并调用其底层Reader上的read()方法。您使用BufferedReader的主要原因之一是您可以使用readLine()方法。除了FileReader之外,BufferedReader可以包装其他读者(例如InputStreamReader)。
答案 3 :(得分:2)
BufferedReader在任何阅读器上添加一层缓冲。关键是,与以无缓冲方式读取文件,套接字或其他内容相比,读取更加优化。 它还添加了一些方便的方法,除非它为你预取了一块,否则它将无法正常工作。在FileReader的情况下,您必须读取一块数据,直到找到'\ n'能够执行类似BufferedReader.readLine()的操作,然后您必须保留其余数据以进行下一次读取操作(更不用说当你必须等待一个缓慢的数据源将它传递给你时所需的工作)。