1. 程式人生 > >IO讀寫(復制)視頻練習

IO讀寫(復制)視頻練習

IO

package com.chen.io1;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**

  • IO練習,一個復制視頻的類
  • 練習文件為大小1,443,621 字節的wmv視頻文件
  • @author Administrator
  • */
    public class CopyVideo {
    /**

    • 方法一
    • 基礎復制方法
    • 使用InputStream,OutputStream
    • 測試結果:基礎復制花費時間:10367毫秒;
    • @param fromFileName
    • @param toFileName
      */
      public static void baseCopyMethod(String fromFileName,String toFileName) {
      long startTime = System.currentTimeMillis();
      InputStream in = null;
      OutputStream out = null;
      try {
      in = new FileInputStream(fromFileName);
      out = new FileOutputStream(toFileName);
      int tempRead ;
      while((tempRead = in.read())>-1) {
      out.write(tempRead);
      out.flush();
      }
      } catch (FileNotFoundException e) {
      e.printStackTrace();
      } catch (IOException e) {
      e.printStackTrace();
      }finally {
      try {
      if(in!=null)in.close();
      if(out!=null)out.close();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      long endTime = System.currentTimeMillis();
      long spendTime = endTime - startTime;
      System.out.println("方法一,基礎復制花費時間:"+ spendTime + "毫秒;");
      }

    /**

    • 方法二
    • 使用InputStream,OutputStream,並增加字節數組作為緩沖區,提升效率
    • 方法二,增加緩存後復制用時:121毫秒
    • @param fromFileName
    • @param toFileName
      */
      public static void baseCopyMethod2(String fromFileName,String toFileName) {
      long startTime = System.currentTimeMillis();
      InputStream in = null;
      OutputStream out = null;

      try {
      in = new FileInputStream(fromFileName);
      out = new FileOutputStream(toFileName);
      byte[] buf = new byte[102];//緩沖區數組,減少硬盤的讀取操作
      int tempRead ;
      while((tempRead=in.read(buf))>-1) {
      out.write(buf);
      out.flush();
      }
      } catch (FileNotFoundException e) {
      e.printStackTrace();
      } catch (IOException e) {
      e.printStackTrace();
      }finally {
      try {
      if(in!=null)in.close();
      if(out!=null)out.close();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      long endTime = System.currentTimeMillis();
      long spendTime = endTime - startTime;
      System.out.println("方法二,增加緩存後復制用時:"+ spendTime + "毫秒");
      }

    /**

    • 方法三
    • 方法三,使用BufferedInputStream和BufferedOutputStream
    • 方法三,使用BufferedInputStream和BufferedOutputStream後復制用時:8268毫秒
    • @param fromFileName
    • @param toFileName
      */
      public static void bufferedCopyMethod(String fromFileName,String toFileName ) {
      long startTime = System.currentTimeMillis();
      BufferedInputStream in = null;
      BufferedOutputStream out = null;
      try {
      in = new BufferedInputStream(new FileInputStream(fromFileName));
      out = new BufferedOutputStream(new FileOutputStream(toFileName));
      int readContent;
      while((readContent = in.read())!=-1) {
      out.write(readContent);
      out.flush();
      }
      } catch (FileNotFoundException e) {
      e.printStackTrace();
      } catch (IOException e) {
      e.printStackTrace();
      }finally {
      try {
      if(in!=null)in.close();
      if(out!=null)out.close();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      long endTime = System.currentTimeMillis();
      long spendTime = endTime - startTime;
      System.out.println("方法三,使用BufferedInputStream和BufferedOutputStream後復制用時:"+ spendTime + "毫秒");
      }

    /**

    • 方法四
    • 方法四,在BufferedInputStream和BufferedOutputStream基礎上再次添加緩存數組
    • 方法四,BufferedInputStream和BufferedOutputStream基礎上添加緩存數組後復制用時:16毫秒
    • @param fromFileName
    • @param toFileName
      */
      public static void bufferedCopyMethod2(String fromFileName,String toFileName ) {
      long startTime = System.currentTimeMillis();
      BufferedInputStream in = null;
      BufferedOutputStream out = null;
      try {
      in = new BufferedInputStream(new FileInputStream(fromFileName));
      out = new BufferedOutputStream(new FileOutputStream(toFileName));
      int readContent ;
      byte[] buf = new byte[1024];
      while((readContent=in.read(buf))!=-1) {
      out.write(buf);
      out.flush();
      }
      } catch (FileNotFoundException e) {
      e.printStackTrace();
      } catch (IOException e) {
      e.printStackTrace();
      }finally {
      try {
      if(in!=null)in.close();
      if(out!=null)out.close();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      long endTime = System.currentTimeMillis();
      long spendTime = endTime - startTime;
      System.out.println("方法四,BufferedInputStream和BufferedOutputStream基礎上添加緩存數組後復制用時:"+ spendTime + "毫秒");
      }

    public static void main(String[] args) {
    String fromFileName = "C:\Users\Administrator\Desktop\test.wmv";
    String toFileName = "C:\Users\Administrator\Desktop\test1.wmv";
    //baseCopyMethod(fromFileName,toFileName);
    //baseCopyMethod2(fromFileName,toFileName);
    //bufferedCopyMethod(fromFileName,toFileName);
    bufferedCopyMethod(fromFileName,toFileName);
    }
    }

IO讀寫(復制)視頻練習