【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

猜你喜欢

转载自blog.csdn.net/qq_42370146/article/details/83383802