java NIO/IO文件读取+md5校验速度对比

本文对比了使用FileChannel和FileInputStream进行MD5文件校验时的读取速度,包括注释MD5计算部分和开启MD5计算两种情况下的性能测试。

近日需要写一个md5的文件校验。想测试一下使用FileChannel 和FileInputStream 的读取速度区别。


使用fileinputstream

in=new FileInputStream(file);
byte[] buffer=new byte[65536];
messageDigest = MessageDigest.getInstance("MD5");

messageDigest.reset();

int rv=0;
while((rv=in.read(buffer))>0) {
   // messageDigest.update(buffer,0,rv);
}

使用filechannel

in=new FileInputStream(file);
FileChannel ch=in.getChannel();
messageDigest = MessageDigest.getInstance("MD5");

messageDigest.reset();

ByteBuffer buffer=ByteBuffer.allocate(65536);

while(ch.read(buffer)>0) {
    buffer.flip();
   // messageDigest.update(buffer);
    buffer.clear();
}


测试机器:thinkpad w520,i7 2860QM 2.5Ghz 4c8t,32G内存其中12G作为ramdisk

测试使用lol的客户端安装文件,大概3.16G
注释掉关于md5计算的部分。读取文件filechannel使用1419ms,(但是第二次测试居然84108ms),fileinputstream使用1149ms。第二次测试依旧1127ms
开启messageDigest的计算filechannel使用12380ms,fileinputstream使用12999ms。

再测试使用我系统盘的ghost文件,大概15.9G
注释掉关于md5计算的部分。读取文件filechannel使用397307ms,fileinputstream使用396798ms。
开启messageDigest的计算filechannel使用400456ms,fileinputstream使用397002ms。
另外对测试了一个100字节的读取10000次,
fc使用1182ms,inputstream 752ms,
带md5计算1135ms,inputstream 636ms
9.57M的mp3读取10000次
fc: 30952ms,inputstream 32376ms
带md5计算 fc:358514ms,inputstream 363194ms


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值