day_8/18(字节流与缓冲流复制文件的效率)

目录

前言

缓冲流

        概述

        字节缓冲流

        字符缓冲流

        实现原理    

字节流复制文件

缓冲流复制文件

总结


前言

        我们在使用字节流操作文件时,每次读写操作都需要花费一定的时间,在练习的时侯,测试的文件一般来说都比较小,感觉不到花的时间,但是如果文件大了,操作的时候就会感觉到花费的时间多了,所以在字节流的基础上就衍生出了一类文件读写高效的流——缓冲流。

缓冲流

        概述

        缓冲流就是字节流加了buff,相对字节流来说更强了。   

        字节缓冲流

        字节缓冲流有BufferedInputStream和BufferedOutputStream,用于操作字节。

        字符缓冲流

        字符缓冲流有BufferedReader和BufferedWriter,用于操作字符。

        实现原理    

        在创建缓冲流对象的时候同时创建一个默认的缓冲区数组,通过缓冲区读写,减少读写次数,从而提高效率。

字节流复制文件

现在我需要把我的电脑里面F盘下的“孙子从美国来 2012.rmvb”文件复制C:\Users\DLHLD\Desktop目录下,先看使用字节流复制的演示代码:

//使用字节流复制视频
    public static void stream() throws IOException {
        //获取系统当前时间作为复制开始时的时间
        long startTime = System.currentTimeMillis();
        //创建FileInputStream对象,用于从文件读取数据
        FileInputStream fis = new FileInputStream("F:孙子从美国来 2012.rmvb");
        //创建FileOutputStream对象,用于写出数据到文件
        FileOutputStream fos = new FileOutputStream("C:\\Users\\DLHLD\\Desktop\\孙子从美国来 2012.rmvb");
        //边读编写
        byte [] bytes = new byte[1024];
        while(fis.read(bytes) != -1){
            fos.write(bytes);
        }
        //关闭流对象
        fis.close();
        fos.close();
        //获取系统当前时间作为复制结束后的时间
        long endTime = System.currentTimeMillis();
        System.out.println("使用字节流复制视频的时间:"+(endTime-startTime)+"ms");
    }

运行结果: 

 花费时间28秒左右,文件大小1.24 GB (1,332,086,625 字节)

缓冲流复制文件

这里先要把目录C:\Users\DLHLD\Desktop下的文件孙子从美国来 2012.rmvb先删除,随后再操作,看测试代码:

//使用缓冲流复制视频
    public static void bufferStream() throws IOException {
        //获取系统当前时间作为复制开始时的时间
        long startTime = System.currentTimeMillis();
        //创建BufferedInputStream对象,用于从文件读取数据
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:孙子从美国来 2012.rmvb"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\Users\\DLHLD\\Desktop\\孙子从美国来 2012.rmvb"));
        byte [] bytes = new byte[1024];
        while (bis.read(bytes) != -1){
            bos.write(bytes);
        }
        //关闭流对象
        bis.close();
        bos.close();
        //获取系统当前时间作为复制结束后的时间
        long endTime = System.currentTimeMillis();
        System.out.println("使用缓冲流复制视频的时间:"+(endTime-startTime)+"ms");
    }

运行结果: 

 只花了3.1秒,速度差不多是十倍了。

总结

在需要操作大文件的时候,可以使用缓冲流,不过也要慎用,节省的时间都是用空间换来的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值