Java 字节流数据拷贝性能测试

 

package cn.edu.lcudcc.byte_buffer_time;

import java.io.*;

public class ByteBufferTimeDemo {
    private static final String SRC_FILE = "/Users/baoshan/Downloads/线上教学截图/meeting_01.mp4";
    private static final String DEST_FILE = "/Users/baoshan/Downloads/";

    public static void main(String[] args) {
//        copy01(); // 低级 字节流复制
        copy02(); // 低级 字节数组流复制
//        copy03(); // 缓冲 字节流复制
        copy04(); // 缓冲 字节数组流复制  效率高,优先使用
    }

    private static void copy01() {
        long startTime = System.currentTimeMillis();
        try{
            InputStream is = new FileInputStream(SRC_FILE);
            OutputStream os = new FileOutputStream(DEST_FILE+"video1.mp4");

            int b;
            while ((b = is.read()) != -1) {
               os.write(b);
            }
            os.flush();
            os.close();
            is.close();
        }
        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 {
            InputStream is = new FileInputStream(SRC_FILE);
            OutputStream os = new FileOutputStream(DEST_FILE + "video2.mp4");
            byte[] buffer = new byte[1024];
            int len;
            while ((len = is.read(buffer)) != -1){
                os.write(buffer, 0, len);
            }
            os.flush();
            os.close();
            is.close();
        }
        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{
            InputStream is = new FileInputStream(SRC_FILE);
            BufferedInputStream bis = new BufferedInputStream(is);
            OutputStream os = new FileOutputStream(DEST_FILE+"video3.mp4");
            BufferedOutputStream bos = new BufferedOutputStream(os);

            int b;
            while ((b = bis.read()) != -1) {
                bos.write(b);
            }
            bos.flush();
            bos.close();
            bis.close();
            os.close();
            is.close();
        }
        catch (Exception e){
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("使用缓冲的字节流按照一个一个字节的形式复制文件耗时:" + (endTime - startTime) / 1000.0 + "s");
    }

    private static void copy04() {
        long startTime = System.currentTimeMillis();
        try {
            InputStream is = new FileInputStream(SRC_FILE);
            BufferedInputStream bis = new BufferedInputStream(is);
            OutputStream os = new FileOutputStream(DEST_FILE+"video4.mp4");
            BufferedOutputStream bos = new BufferedOutputStream(os);

            byte[] buffer = new byte[1024];
            int len;
            while ((len = bis.read(buffer)) != -1){
                bos.write(buffer, 0, len);
            }
            bos.flush();
            bos.close();
            bis.close();
            os.close();
            is.close();
        }
        catch (Exception e){
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("使用缓冲的字节流数组按照一个一个字节的形式复制文件耗时:" + (endTime - startTime) / 1000.0 + "s");
    }

}

  

结论:高级缓冲字节数组流复制,效率最高,优先使用。

 

posted @ 2022-12-24 21:54  宝山方圆  阅读(23)  评论(0编辑  收藏  举报