我读到了这个问题:Why is using BufferedInputStream to read a file byte by byte faster than using FileInputStream?据作者BufferedInputStream(BIS)
比FileInputStream(FIS)
更快,因为在read()
中调用方法FileInputStream
时,系统总是使用本机API为了获取单个字节,而BufferedInputStream
进行了同样的操作,但是它需要从OS中获取字节块并将它们存储在称为buf
的本地字段中,该字段在BIS类中声明,然后在{{1 }}被称为read()
数组中的BIS返回字节。
我查看了BIS的代码,特别是buf
方法,当BIS需要字节块而不是一个字节时,它并不清楚何时发生。方法read()
首先检查read()
,如果是,则调用if (pos >= count)
方法,该方法首先检查buf是否未满,如果buf有空间,则InputStream的方法称为fill()
,其中b [ ]是我们的缓冲区,并且在此方法内部,我们可以看到它在等于public int read(byte b[],int off,int len)
param的循环内进行系统调用。
len
我是否错过了某些事情,或者BIS和FIS类将进行相同数量的系统调用,以便分别获取每个字节?