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