首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在缓冲区大小相同的情况下,FileInputStream比BufferedInputStream快得多

在缓冲区大小相同的情况下,为什么FileInputStream比BufferedInputStream快得多?

FileInputStream和BufferedInputStream是Java中用于读取文件的两个常用类。它们之间的性能差异主要是由于它们的工作原理和数据读取方式的不同。

  1. 工作原理:
    • FileInputStream:FileInputStream是一个基于字节的输入流,它直接从文件中读取字节数据,并将其传递给应用程序。
    • BufferedInputStream:BufferedInputStream是一个缓冲输入流,它在内部维护了一个缓冲区,通过一次性读取一定数量的数据块(默认为8192字节),然后将数据存储在缓冲区中,最后逐个字节地将数据传递给应用程序。
  • 数据读取方式:
    • FileInputStream:FileInputStream每次从文件中读取一个字节,并将其传递给应用程序。这意味着每次读取操作都会导致磁盘访问,而磁盘访问是相对较慢的操作。
    • BufferedInputStream:BufferedInputStream通过一次性读取一定数量的数据块(缓冲区大小),减少了对磁盘的访问次数。当应用程序需要读取数据时,它首先从缓冲区中获取数据,如果缓冲区中没有足够的数据,则会再次从文件中读取一定数量的数据块到缓冲区中。

基于以上的工作原理和数据读取方式的不同,可以解释为什么在缓冲区大小相同的情况下,FileInputStream比BufferedInputStream快得多:

  • FileInputStream每次读取一个字节,需要频繁地进行磁盘访问,而磁盘访问是相对较慢的操作,因此效率较低。
  • BufferedInputStream通过一次性读取一定数量的数据块,并将其存储在缓冲区中,减少了对磁盘的访问次数,从而提高了效率。

综上所述,当缓冲区大小相同时,BufferedInputStream由于减少了对磁盘的频繁访问,因此比FileInputStream具有更高的读取效率。

相关搜索:为什么在numpy中加载不同大小的图像是相同大小的?使用CarrierWave在不保留原始纵横比的情况下调整图像大小在没有固定表达式的情况下,Span<T>指向固定大小的缓冲区吗?为什么这个函数在不考虑输入的情况下返回相同的值?为什么在已经配置缓冲区大小的情况下,有时Log4net事件会以随机事件计数进行记录?我想知道为什么在angular中dist文件夹的大小比src大?为什么在没有相同的同义词集的情况下,tmp仍然打印1?为什么Math.imul()在输入很少的情况下比常规乘法(*)快,而在大量输入的情况下要慢呢?为什么msvcrt.getch()在不按任何键的情况下总是得到相同的输入为什么ad-hoc SQL比在存储过程中执行相同的代码运行得更快?为什么git diff会考虑在两个分支上相同的情况下进行更改?为什么在dynamoDB中插入项目时,使用相同的变量仅在1种情况下获得RecursionError我在Python中有两个用来查找质数的代码。为什么在这两个代码中,一个产生结果的速度比其他代码快得多为什么相同的代码在相同大小的相同浏览器中看起来不同,其中一个部署在本地主机上,另一个部署在远程上为什么在相同数据的情况下,系列的内存使用量大约是DataFrame的1.5倍?为什么有些字符在使用字体大小的==行高的情况下会溢出一行?为什么在anaconda/lib中有相同大小但名称略有不同的重复/三重文件夹?为什么在启用大小优化配置的情况下编译内核时,变量未初始化的警告会被抑制?假设列大小相同,在Java中如何在没有Array copy的情况下追加和预先添加2D数组?为什么在NSAttributedString不同意的情况下,第二个文本块的行高比第一个文本块高得多?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券