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

黑马JAVA P163 字节缓冲流的性能分析_第1张图片黑马JAVA P163 字节缓冲流的性能分析_第2张图片黑马JAVA P163 字节缓冲流的性能分析_第3张图片

 黑马JAVA P163 字节缓冲流的性能分析_第4张图片

 

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");
    }
}

黑马JAVA P163 字节缓冲流的性能分析_第5张图片

 

你可能感兴趣的:(每日更新,API技术,java,开发语言,后端)