字节流文件复制方式:
(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