2

调用read(char[] cbuf)之间的性能差异FileReaderBufferedReader假设缓冲区的大小BufferedReadercbuf.

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

read(char[] cbuf)上的AFileReader将读取cbuf字符的大小,只需一个与BufferedReader.

如果在vsread(char[] cbuf)上使用方法,那么会有任何性能差异吗?FileReaderBufferedReader

4

2 回答 2

4

FileReader 上的 read(char[] cbuf) 只需一个与 BufferedReader 类似的本机调用即可读取字符的 cbuf 大小。

这是不正确的。没有读入 Javachar[]数组的本机调用。FileReader 实际上是一个InputStreamReader分层的FileInputStream.InputStreamReader运行 8k 内部缓冲区。所以文件一次被读取到 8k。

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

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

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

于 2013-03-05T00:00:50.953 回答
1

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

但是要衡量它,因为性能结果取决于以下事项:

  • 读取操作的大小、时间和位置(如果每次读取都在缓冲区长度之后进行查找怎么办?);
  • 计算硬件、本机软件和 JVM;
  • 您是否可以普遍预测您的应用程序;
  • 以及(为了获得 JIT 编译和其他运行时优化的好处)您的读取操作是否可预测、突发或持续。

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

您没有提到维护软件的问题,但通常这是值得考虑的软件生命周期成本的主要部分。维护使用标准库的代码比重新发明相同功能的代码更容易。

于 2013-03-04T20:54:51.823 回答