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
vsBufferedReader
计划:BufferedReader会占用一些空间,因此典型的使用会占用更少的时间
但要衡量它,因为绩效结果取决于以下事项:
- 读取操作的大小、定时和位置(如果每次读取都在刚超过缓冲区长度时进行寻道会怎么样?)李>
- 计算硬件、本机软件和JVM李>
- 你是否能大致预测你的申请李>
- 和(为了得到 JIT编译和其他运行时优化的好处)是否 您的读取操作是可预测的还是不可预测的,是突发的还是持续的
char[]
数组的本机调用。FileReader实际上是一个InputStreamReader
在FileInputStream上分层。
InputStreamReader运行一个8k内部缓冲区。因此,文件一次最多读取8k
所以,如果在FileReader
vsBufferedReader
上使用read(char[]cbuf)方法,会不会有任何性能差异
您将看到BufferedReader
由于双重缓冲,读取缓冲区的速度较慢,但这是不正确的BufferedReader
检测到这种情况,并尽可能直接进行读取
简而言之,您不会注意到差异。您是否尝试过测量?缓冲两次。BufferedReader有一个内部缓冲区,您正在读取的字符[]是另一个。