缓存IO类进行复制文件速度比较

    private static void fileStream() {
        //        普通字节复制:耗时7343
        try {
            FileInputStream fis = new FileInputStream("D:\\我的电脑\\asd\\aa\\a.jpg");
            int len = 0;
            FileOutputStream fos = new FileOutputStream("D:\\我的电脑\\asd\\aa\\b.jpg");
            long k = System.currentTimeMillis();
            while ((len = fis.read()) != -1) {
                fos.write(len);
            }
            fos.close();
            fis.close();
            long j = System.currentTimeMillis();
            System.out.println("单个字节复制耗时" + (j - k));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  private static void bufferedStream() {
        try {
            //缓存字节复制:耗时79
            long k = System.currentTimeMillis();
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\我的电脑\\asd\\aa\\a.jpg"));
            int len = 0;
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\我的电脑\\asd\\aa\\b.jpg"));
            while ((len = bis.read()) != -1) {
                bos.write(len);
            }
            bos.close();
            bis.close();
            long j = System.currentTimeMillis();
            System.out.println("缓存单个字节复制耗时" + (j - k));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

很显然,缓存复制时速度快了很多,它的底层给了一个 1024*8的数组,所以速度快很多

我们来看看字符复制是不是更快:

private static void bufferedReader() {
        long k = System.currentTimeMillis();
        try {
            BufferedReader br = new BufferedReader(new FileReader("D:\\我的电脑\\asd\\aa\\a.jpg"));
            BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\我的电脑\\asd\\aa\\b.jpg"));
            int len = 0;
            while ((len = br.read()) != -1) {
                bw.write(len);
            }
            bw.close();
            br.close();
            long j = System.currentTimeMillis();
            System.out.println("耗时" + (j - k));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

   
 private static void fileReader() {
        //普通字符复制耗时506
        long k = System.currentTimeMillis();
        try {
            FileReader fr = new FileReader("D:\\我的电脑\\asd\\aa\\a.jpg");
            FileWriter fw = new FileWriter("D:\\我的电脑\\asd\\aa\\b.jpg");
            int len = 0;
            while ((len = fr.read()) != -1) {
                fw.write(len);
            }
            fw.close();
            fr.close();
            long j = System.currentTimeMillis();
            System.out.println("耗时" + (j - k));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

 为什么字符复制反倒没有字节复制快呢?

而且当我们点开复制文件b.jpg的时候会发现,

                                                该文件已经损坏,无法打开!

这里就要注意,字符写入一下写入一个字符,只适合拿来复制文字,复制图片、视频等就会非常容易出错!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值