package newio;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
/*
* 分别采用新旧I/O包的API复制文件,比较性能
*/
public class CopyFileCompara {
public void copyFileOld(File from,File to) throws IOException{
//使用传统的I/O流处理(加了缓冲机制)
FileInputStream fin=new FileInputStream(from);
FileOutputStream fout=new FileOutputStream(to);
BufferedInputStream in=new BufferedInputStream(fin);
BufferedOutputStream out=new BufferedOutputStream(fout);
int b;
long start=System.currentTimeMillis();
while((b=in.read())!=-1){
out.write(b);
}
long cost=(System.currentTimeMillis()-start)/1000;
System.out.println("旧I/O(使用缓冲)耗时:"+cost+"s");
out.close();
in.close();
}
public void copyFileNew(File from,File to) throws IOException{
//使用Channel和Buffer处理
FileChannel fin=new FileInputStream(from).getChannel();
FileChannel fout=new FileOutputStream(to).getChannel();
long start=System.currentTimeMillis();
ByteBuffer bfi=fin.map(FileChannel.MapMode.READ_ONLY, 0, from.length());
fout.write(bfi);
long cost=(System.currentTimeMillis()-start)/1000;
System.out.println("新I/O耗时:"+cost+"s");
fout.close();
fin.close();
}
public static void main(String[] args) throws IOException {
//复制的文件大一点会更好地体现效果
new CopyFileCompara().copyFileOld(new File("F:\\01第一讲上.wmv"), new File("F:\\副本1.wmv"));
new CopyFileCompara().copyFileNew(new File("F:\\01第一讲上.wmv"), new File("F:\\副本2.wmv"));
}
}
比较java新旧I/O的性能——以复制大文件为例
最新推荐文章于 2020-03-02 18:10:29 发布