Java 读卡器与缓冲读卡器

Java 读卡器与缓冲读卡器,java,bufferedreader,Java,Bufferedreader,如果FileReader和BufferedReader的缓冲区大小与BufferedReader相同,那么调用read(char[]cbuf)的性能会有什么不同 我知道在FileReader上进行一个简单的read()调用会比较慢,因为每次本机调用读取每个字符时 FileReader上的read(char[]cbuf)只需一个本机调用即可读取cbuf大小的字符,这与BufferedReader的调用类似 因此,如果read(char[]cbuf)方法用于FileReadervsBufferedR

如果
FileReader
BufferedReader
的缓冲区大小与
BufferedReader
相同,那么调用
read(char[]cbuf)
的性能会有什么不同

我知道在
FileReader
上进行一个简单的
read()
调用会比较慢,因为每次本机调用读取每个字符时

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


因此,如果
read(char[]cbuf)
方法用于
FileReader
vs
BufferedReader

计划:BufferedReader会占用一些空间,因此典型的使用会占用更少的时间

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

  • 读取操作的大小、定时和位置(如果每次读取都在刚超过缓冲区长度时进行寻道会怎么样?)
  • 计算硬件、本机软件和JVM
  • 你是否能大致预测你的申请
  • 和(为了得到 JIT编译和其他运行时优化的好处)是否 您的读取操作是可预测的还是不可预测的,是突发的还是持续的
此外,性能结果的重要性将取决于应用程序的功能需求

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

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

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

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

您将看到
BufferedReader
由于双重缓冲,读取缓冲区的速度较慢,但这是不正确的
BufferedReader
检测到这种情况,并尽可能直接进行读取


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

您是否尝试过测量?缓冲两次。BufferedReader有一个内部缓冲区,您正在读取的字符[]是另一个。