阅读器vs缓冲阅读器
假设BufferedReader
的缓冲区大小与cbuf
的大小相同,和BufferedReader
之间调用read(char[] cbuf)
时的性能差异是多少。阅读器vs缓冲阅读器
我知道FileReader
上的一个简单的read()
调用在每次本机调用读取每个字符时都会变慢。
read(char[] cbuf)
在FileReader
将读取cbuf
字符的大小只有一个本地调用,这是类似于BufferedReader
。
如果在FileReader
和BufferedReader
上使用read(char[] cbuf)
方法,那么会有任何性能差异。
FileReader上的read(char [] cbuf)只会用一个与BufferedReader类似的本地调用来读取chars的cbuf大小。
这是不正确的。没有读入Java char[]
阵列的本机调用。一个FileReader实际上是一个InputStreamReader
分层覆盖一个FileInputStream.
该InputStreamReader
运行一个8k内部缓冲区。因此,该文件一次最多可以读取8k。
所以会有任何性能差,如果读(烧焦[] CBUF)上正在使用
FileReader
VSBufferedReader
方法。
您会读到BufferedReader
由于双缓冲而缓慢读入缓冲区的意见,但它们不正确。 BufferedReader
检测到这种情况,并在可能的情况下直接进行读取。
总之,你不会注意到一个区别。
该计划:BufferedReader消耗一些空间,所以典型的使用可以消耗更少的时间。
但衡量它,因为性能结果取决于下列事项:
- 大小,时间和位置读操作(如果有什么每个读不在一个寻求刚刚过去的缓冲区长度? );
- 计算硬件,原生软件和JVM;
- 您是否可以普遍预测那些适合您的应用程序;
- 和(为了得到 JIT编译和其他运行时优化的好处)是否 您的读取操作是可预测的或不可预测的,突发或持续的。
此外,性能结果的重要性取决于您的应用程序的功能要求。
您没有提及维护软件的问题,但通常值得考虑作为软件生命周期成本的主要部分。维护使用标准库的代码比重新实现相同功能的代码更容易。
您是否尝试过测量? – 2013-03-04 20:35:56