黑马JAVA P163 字节缓冲流的性能分析

 

 

package com.itheima.d2_byte_buffer_time;

import java.io.*;

public class ByteBufferTimeDemo {
    private static final String SRC_FILE = "D:\\黑马JAVA资料\\day21、多线程\\资料\\12、线程通信案例实现最新.mp4";
    private static final String DEST_FILE = "D:\\course\\";

    public static void main(String[] args) {
//        copy01();//使用低级的字节流按照一个一个字节的形式复制文件:慢的让人简直无法忍受,直接被淘汰
        copy02();//使用低级的字节流按照一个一个字节数组的形式复制文件:比较慢,但是还是可以忍受的!
        copy03();//缓冲流一个一个字节复制:很慢,不建议使用。
        copy04();//缓冲流一个一个字节数组复制:飞快,简直太完美了(推荐使用)
        
    }
    private static void copy04() {
        long startTime = System.currentTimeMillis();

        try (//
             //1.创建低级的字节输入流与源文件接通
             InputStream is = new FileInputStream(SRC_FILE);
             //a.把原始的字节输入流包装成高级的缓冲字节输入流
             InputStream bis = new BufferedInputStream(is);
             //2.创建低级的字节输出流与目标文件接通
             OutputStream os = new FileOutputStream(DEST_FILE + "video4.avi");
             // b.把字节输出流管道包装成高级的缓冲字节输出流管道
             OutputStream bos = new BufferedOutputStream(os);
        ){
            //3.定义一个字节数组转移数据
            byte[] buffer = new byte[1024 ];
            int len; //记录每次读取的字节数
            while ((len = bis.read(buffer))!=-1 ){
                bos.write(buffer,0, len);
            }


        } catch (Exception e) {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("使用缓冲的字节流按照一个一个字节数组的形式复制文件耗时:" + (endTime - startTime)/1000.0 + "s");
    }





    private static void copy03() {
        long startTime = System.currentTimeMillis();
        try(
                //1.创建低级的字节输入流与源文件接通
                InputStream is = new FileInputStream(SRC_FILE);
                //a.把原始的字节输入流包装成高级的缓冲字节输入流
                InputStream bis = new BufferedInputStream(is);
                //2.创建低级的字节输出流与目标文件接通
                OutputStream os = new FileOutputStream(DEST_FILE + "video3.avi");
                // b.把字节输出流管道包装成高级的缓冲字节输出流管道
                OutputStream bos = new BufferedOutputStream(os);
        ) {

            //3.定义一个变量记录每次读取的字节(一个一个字节的复制)
            int b;
            while ((b = bis.read()) != -1){
                bos.write(b);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("使用缓冲的字节流按照一个一个字节的形式复制文件耗时:" + (endTime - startTime)/1000.0 + "s");
    }




    private static void copy02() {
        long startTime = System.currentTimeMillis();

        try (//
             //这里面只能放置资源对象,用完会自动关闭:自动调用资源对象的close方法关闭资源(即使出现异常也会做关闭操作)
             //1.创建一个字节输入流管道与原视频接通
             InputStream is = new FileInputStream(SRC_FILE);
             //2.创建一个字节输出流管道与目标文件接通
             OutputStream os = new FileOutputStream(DEST_FILE + "video2.avi");

             //int age = 23; //这里只能放资源
        ){
            //3.定义一个字节数组转移数据
            byte[] buffer = new byte[1024 ];
            int len; //记录每次读取的字节数
            while ((len = is.read(buffer))!=-1 ){
                os.write(buffer,0, len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("使用低级的字节流按照一个一个字节数组的形式复制文件耗时:" + (endTime - startTime)/1000.0 + "s");
    }

    /**
     * //使用低级的字节流按照一个一个字节的形式复制文件
     */
    private static void copy01() {
        long startTime = System.currentTimeMillis();
        try(
                //1.创建低级的字节输入流与源文件接通
                InputStream is = new FileInputStream(SRC_FILE);
                //2.创建低级的字节输出流与目标文件接通
                OutputStream os = new FileOutputStream(DEST_FILE + "video1.avi");
                ) {

            //3.定义一个变量记录每次读取的字节(一个一个字节的复制)
            int b;
            while ((b = is.read()) != -1){
                os.write(b);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("使用低级的字节流按照一个一个字节的形式复制文件耗时:" + (endTime - startTime)/1000.0 + "s");
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值