JAVA——缓冲流 (字节缓冲流读取文件的速度比较 --使用缓冲流角度和使用数组的角度)

package com.cskaoyan.io01.efficiency;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author zhangshuai@Cskaoyan.onaliyun.com on
 * @version 1.0
 *
 * 比较四种复制方式的效率
 *
 * 1. 不使用缓冲流
 *    a. 一次复制一个字节数据
 *    b. 一次复制一个字节数组的数据
 *
 * 2. 使用缓冲流
 *    a. 一次复制一个字节数据
 *    b. 一次复制一个字节数组的数据
 *
 *
 *    copyByte: 48902
 *    copyByteInBuf: 411
      copyBytes: 40
      copyBytesInBuf: 18
 *
 *
 *
 */
public class Comparison {

  public static void main(String[] args) throws IOException {
    File src = new File("e:\\copy\\vedio.mp4");
    File dest1 = new File("e:\\copy-vedio1.mp4");
    File dest2 = new File("e:\\copy-vedio2.mp4");
    File dest3 = new File("e:\\copy-vedio3.mp4");
    File dest4 = new File("e:\\copy-vedio4.mp4");

    //不用缓冲流,一次复制一个字节
    copyByte(src, dest1);
    //使用缓冲流,一次复制一个字节
    //copyByteInBuf(src, dest2);
    //不使用缓冲流,一次复制一个字节数组数据
    //copyBytes(src, dest3);
    //使用缓冲流,一次复制一个字节数组数据
    //copyBytesInBuf(src, dest4);
  }


  /**
   *  一次读写一个字节
   */
  public static void copyByte(File srcFile, File destFile) throws IOException {
    //创建输入流对象
    FileInputStream fis = new FileInputStream(srcFile);

    //创建输出流对象
    FileOutputStream fos = new FileOutputStream(destFile);

    int readByte;

    //记录当前时间的毫秒值
    long start = System.currentTimeMillis();
    //开始一个字节一个字节的复制
    while ((readByte = fis.read()) != -1) {
      fos.write(readByte);
    }
    //记录复制完成之后的一个时间的毫秒值
    long end = System.currentTimeMillis();
    System.out.println("copyByte: " + (end - start));

    fis.close();
    fos.close();

  }

  /**
   *  一次读写一个字节 但是用的是缓冲流
   */
  public static void copyByteInBuf(File srcFile, File destFile) throws IOException {
    //创建输入流对象
    FileInputStream fis = new FileInputStream(srcFile);
    BufferedInputStream bis = new BufferedInputStream(fis);
    //创建输出流对象
    FileOutputStream fos = new FileOutputStream(destFile);
    BufferedOutputStream bos = new BufferedOutputStream(fos);

    int readByte;

    //开始一个字节一个字节的复制
    long start = System.currentTimeMillis();
    while ((readByte = bis.read()) != -1) {
      bos.write(readByte);
    }
    long end = System.currentTimeMillis();
    System.out.println("copyByteInBuf: " + (end - start));
    bis.close();
    bos.close();

  }



  /**
   *  一次读写一个字节数组
   */
  public static void copyBytes(File srcFile, File destFile) throws IOException {
    //创建输入流对象
    FileInputStream fis = new FileInputStream(srcFile);

    //创建输出流对象
    FileOutputStream fos = new FileOutputStream(destFile);


    int len;

    byte[] buffer = new byte[2048];

    long start = System.currentTimeMillis();
    //开始一个字节一个字节的复制
    while ((len = fis.read(buffer)) != -1) {
      fos.write(buffer, 0, len);
    }
    long end = System.currentTimeMillis();
    System.out.println("copyBytes: " + (end - start));
    fis.close();
    fos.close();

  }

  /**
   *  一次读写一个字节数组,用缓冲流
   */
  public static void copyBytesInBuf(File srcFile, File destFile) throws IOException {
    //创建输入流对象
    FileInputStream fis = new FileInputStream(srcFile);
    BufferedInputStream bis = new BufferedInputStream(fis);
    //创建输出流对象
    FileOutputStream fos = new FileOutputStream(destFile);
    BufferedOutputStream bos = new BufferedOutputStream(fos);

    int len;

    byte[] buffer = new byte[2048];

    long start = System.currentTimeMillis();
    //开始一个字节一个字节的复制
    while ((len = bis.read(buffer)) != -1) {
      bos.write(buffer, 0, len);
    }
    long end = System.currentTimeMillis();
    System.out.println("copyBytesInBuf: " + (end - start));
    bis.close();
    bos.close();

  }

}

  

posted @ 2020-09-01 15:47  LY心情笔记  阅读(375)  评论(0)    收藏  举报