1. 程式人生 > >【Java筆記】IO流中四種檔案複製方式效率比較

【Java筆記】IO流中四種檔案複製方式效率比較

位元組流檔案複製方式:

(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