IO流讀寫(復制)視頻文件練習(java)


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM