您的位置:首页 > 编程语言 > Java开发

java中文件复制得速度测试

2008-10-13 10:42 477 查看
最近,对JAVA中文件复制得方式进行速度测试,得出如下结论,测试方案为:

1.传统IO包得复制方法:
void fileByteCopy(String inFile,String outFile) throw* **ception
{
long t1=System.currentTimeMillis();
FileInputStream in =new FileInputStream(new File(inFile));
FileOutputStream out=new FileOutputStream(new File(outFile),true);

byte[] bytes=new byte[1024];
int i;

while((i=in.read(bytes))!=-1)
{
out.write(bytes,0,i);
}

//out.close();
in.close();
out.close();

System.out.println("花费时间"+(System.currentTimeMillis()-t1)+"豪秒");
}

2.新IO包中基于channel和direct buffer得测试:
void fileBufferCopy(String inFile,String outFile) throw* **ception
{
long t1=System.currentTimeMillis();
//FileInputStream in =new FileInputStream(new File(inFile));
//FileOutputStream out=new FileOutputStream(new File(outFile));

FileChannel inChannel=new FileInputStream(new File(inFile)).getChannel();
FileChannel ouChannel=new FileOutputStream(new File(outFile)).getChannel();

ByteBuffer buffer=ByteBuffer.allocateDirect(1024);
//while((int i=inChannel.read()))
int i=0;

while(true)
{
buffer.clear();
if((i=inChannel.read(buffer))==-1)
break;
buffer.flip();
ouChannel.write(buffer);

}

//out.close();
inChannel.close();
ouChannel.close();

System.out.println("花费时间"+(System.currentTimeMillis()-t1)+"毫秒");
}

3.直接影射,MappedByteBuffer
void byteMapFileCopy(String inFile,String outFile) throw* **ception
long t1=System.currentTimeMillis();
File file=new File(inFile);
FileChannel out=new FileOutputStream(new File(outFile)).getChannel();

//FileInputStream input=new FileInputStream(file);

MappedByteBuffer buffer=new FileInputStream(file).getChannel().map(FileChannel.MapMode.READ_ONLY,0,file.length());
buffer.load();

//Charset charset=Charset.defaultCharset();
//Charset charset=Charset.forName("GBK");

//CharBuffer charBuffer=charset.decode(buffer);

//System.out.println(charBuffer);
out.write(buffer);
buffer=null;
out.close();
System.out.println("花费时间"+(System.currentTimeMillis()-t1)+"测试");

-------------------------------------------------------------------------------
测试文件大小为:200M,同一windows xp系统在只运行此应用程序(系统程序等必须除外,忙碌情况相同),得到如下近似结果:
一:传统IO复制大致消耗时间:9500-15000毫秒
二:direct buffer方式复制消耗时间:9000-15000毫秒
三:系统影射方式复制大致消耗时间:6000-10000毫秒


以上可以看出,第三种方式稍好,不过从后两种方法得原理可以看出,他们比较依赖系统,因此在系统性能良好得情况下应该要优于传统得IO复制方式,如果复制
得文件大小在20M-200M之间,我会优先选用第三种方案,不过它会直接把整个文件影射进内存,如果文件非常大得话,不知道此种方案能行通否?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: