【Java筆記】IO流中四種檔案複製方式效率比較
阿新 • • 發佈:2018-11-03
位元組流檔案複製方式:
(1)位元組流讀寫單個位元組
(2)位元組流讀寫位元組陣列
(3)位元組緩衝流讀寫單個位元組
(4)位元組緩衝流讀寫位元組陣列
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { test_1(); test_2(); test_3(); test_4(); } //位元組流讀寫單個位元組 public static void test_1() throws IOException { long firstTime=System.currentTimeMillis(); FileInputStream fis=new FileInputStream("e:\\原檔案.zip"); FileOutputStream fos=new FileOutputStream("e:\\複製檔案.zip"); int i=0; while((i=fis.read())!=-1) { fos.write(i); } fos.close(); fis.close(); long lastTime=System.currentTimeMillis(); System.out.print("第一種方法的時間是:"); System.out.println(lastTime-firstTime+"ms"); } //位元組流讀寫位元組陣列 public static void test_2() throws IOException { long firstTime=System.currentTimeMillis(); FileInputStream fis=new FileInputStream("e:\\原檔案.zip"); FileOutputStream fos=new FileOutputStream("e:\\複製檔案.zip"); int len=0; byte[] bytes=new byte[1024]; while((len=fis.read(bytes))!=-1) { fos.write(bytes, 0, len); } fos.close(); fis.close(); long lastTime=System.currentTimeMillis(); System.out.print("第二種方法的時間是:"); System.out.println(lastTime-firstTime+"ms"); } //位元組緩衝流讀寫單個位元組 public static void test_3() throws IOException { long firstTime=System.currentTimeMillis(); BufferedInputStream bis=new BufferedInputStream(new FileInputStream("e:\\原檔案.zip")); BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("e:\\複製檔案.zip")); int i=0; while((i=bis.read())!=-1) { bos.write(i); } bis.close(); bos.close(); long lastTime=System.currentTimeMillis(); System.out.print("第三種方法的時間是:"); System.out.println(lastTime-firstTime+"ms"); } //位元組緩衝區讀寫位元組陣列 public static void test_4() throws IOException { long firstTime=System.currentTimeMillis(); BufferedInputStream bis=new BufferedInputStream(new FileInputStream("e:\\原檔案.zip")); BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("e:\\複製檔案.zip")); int len=0; byte[] bytes=new byte[1024]; while((len=bis.read(bytes))!=-1) { bos.write(bytes,0,len); } bis.close(); bos.close(); long lastTime=System.currentTimeMillis(); System.out.print("第四種方法的時間是:"); System.out.println(lastTime-firstTime+"ms"); } }
在進行大約22MB的檔案時,每種方式的效率如下:
第一種方法的時間是:148967ms
第二種方法的時間是:463ms
第三種方法的時間是:1019ms
第四種方法的時間是:226ms