加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

缓冲输出流比Java中的输入流更有效吗?

发布时间:2020-12-14 05:36:41 所属栏目:Java 来源:网络整理
导读:今天早些时候很无聊,我开始思考一下 Java中缓冲和无缓冲字节流的相对性能.作为一个简单的测试,我下载了 a reasonably large text file,并写了一个简短的程序来确定缓冲流在复制文件时的效果.进行了四次测试: 使用无缓冲的输入和输出字节流复制文件. 使用缓
今天早些时候很无聊,我开始思考一下 Java中缓冲和无缓冲字节流的相对性能.作为一个简单的测试,我下载了 a reasonably large text file,并写了一个简短的程序来确定缓冲流在复制文件时的效果.进行了四次测试:

>使用无缓冲的输入和输出字节流复制文件.
>使用缓冲的输入流和无缓冲的输出流复制文件.
>使用无缓冲输入流和缓冲输出流复制文件.
>使用缓冲输入和输出流复制文件.

毫不奇怪,使用缓冲输入和输出流比使用无缓冲流快几个数量级.然而,真正有趣的事情(至少对我来说)是2和3之间的速度差异.一些抽样结果如下:

Unbuffered input,unbuffered output
Time: 36.602513585

Buffered input,unbuffered output
Time: 26.449306847

Unbuffered input,buffered output
Time: 6.673194184

Buffered input,buffered output
Time: 0.069888689

对于那些感兴趣的人,代码可用here at Github.任何人都可以清楚,为什么2和3案例的时间是如此不对称?

解决方法

当您读取文件时,其下的文件系统和设备会进行各种级别的缓存.他们几乎从来没有读过一个字节;他们读了一个街区.在随后读取下一个字节时,该块将处于高速缓存中,因此将更快.

因此,如果您的缓冲区大小与块大小相同,则缓冲输入流实际上并不会获得所有的收益(它节省了一些系统调用,但是在实际的物理I / O方面)不会挽救你太多).

当你写一个文件时,文件系统不能为你缓存,因为你没有给它积压的东西写.它可能可能缓冲您的输出,但它必须有一个有经验的猜测冲洗缓冲区的频率.通过自己缓冲输出,您可以让设备立即执行更多工作,因为您手动构建积压.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读