缓冲流为何要配合字节数组的使用?

在查看缓冲流的源码的时候,我们会发现它在底层创建了一个8196长度的字节数组,利用这个数组去进行数据的交互.

但是我们完全可以自己创建一个字节数组,对数据进行输入或输出,没必要再加上缓冲流啊?或者说,我们单纯使用缓冲流就可以用字节数组传输数据了,那为什么又要把这两个结合起来使用呢?

其实,从结果上来说,两者结合起来效率其实是更高的.

这里,我们从原理的角度解释一下:
缓冲流是在缓冲区中创建了一个字节数组,缓冲区是在内存当中的,效率很高,它创建的这个字节数组是用来储存输出流等传递过来的数据的,直到储存到8196长度时,它才会向外输出.而输出流向这个缓冲区传递数据时,如果是用字节数组进行的,那么效率就会更高.

总的来说,缓冲流就是在数据传递过程中加了一步,输出流向缓冲流造的缓冲区中传数据用字节流更快.缓冲流中创建的那个字节数组和其并没有任何关系.
所以,我们用最快的速度传数据,最好这么写:

		BufferedInputStream bufferedInputStream = null;
        BufferedOutputStream bufferedOutputStream = null;
        try {
            bufferedInputStream = new BufferedInputStream(new FileInputStream("D:\\0004.mp4"));
            bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("work1\\0004.mp4"));
            byte[] bytes = new byte[1024];
            int b;
            while ((b = bufferedInputStream.read(bytes)) != -1){
                bufferedOutputStream.write(bytes,0,b);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bufferedInputStream != null){
                try {
                    bufferedInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bufferedOutputStream != null){
                try {
                    bufferedOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }```

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值