BufferedInputStream如何从OS大量请求数据

我读到了这个问题: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类将进行相同数量的系统调用,以便分别获取每个字节?

diegod3433 回答:BufferedInputStream如何从OS大量请求数据

您在找错地方了。

InputStream提供int read(byte[] b,int off,int len)的实现,该实现确实在循环中调用read()。因此,如果由BuffredInputStream包装的具体InputStream没有覆盖此方法,则不会提高性能。但是,您链接的问题专门讨论了FileInputStream,它通过调用native int readBytes(byte b[],int len) 覆盖此方法。

本文链接:https://www.f2er.com/3061331.html

大家都在问