读者与缓冲读者

时间:2013-03-04 20:32:55

标签: java bufferedreader

假设read(char[] cbuf)的缓冲区大小与FileReader相同,在BufferedReaderBufferedReader之间调用cbuf会有什么性能差异? 。

我知道每次进行本地调用以读取每个字符时,对read()的简单FileReader调用都会变慢。

read(char[] cbuf)上的FileReader只会显示cbuf个字符大小,只有一个本地调用,类似于BufferedReader

如果在read(char[] cbuf) vs FileReader上使用BufferedReader方法,那么会有任何性能差异。

2 个答案:

答案 0 :(得分:3)

  

FileReader上的read(char [] cbuf)将读取cbuf大小的chars,只有一个本机调用,类似于BufferedReader。

这不正确。没有读入Java char[]数组的本机调用。 FileReader实际上是InputStreamReader分层FileInputStream. InputStreamReader运行8k内部缓冲区。因此,文件一次最多可读取8k。

  

如果在FileReader vs BufferedReader上使用read(char [] cbuf)方法,那么会有任何性能差异。

您会看到BufferedReader由于双缓冲而缓慢读入缓冲区的意见,但它们不正确。 BufferedReader检测到这种情况,并在可能的情况下直接进行读取。

简而言之,您不会注意到差异。

答案 1 :(得分:1)

计划:BufferedReader占用一些空间,因此典型用途可以消耗更少的时间。

但要衡量它,因为绩效结果取决于以下事项:

  • 读取操作的大小,时间和位置(如果每次读取只是超过缓冲区长度,那该怎么办?);
  • 计算硬件,本机软件和JVM;
  • 您是否可以根据自己的申请预测;
  • 和(为了得到 JIT编译和其他运行时优化的好处)是否 您的阅读操作是否可预测,突发性或持续性。

此外,性能结果的重要性取决于应用程序的功能要求。

您没有提及维护软件的问题,但通常认为这是软件生命周期成本的主要部分。使用标准库的代码比重新创建相同功能的代码更容易。