java 获取1G文件md5 要多久
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 获取1G文件md5 要多久相关的知识,希望对你有一定的参考价值。
我使用了部分取值的方式来提高MD5的计算速度,这样的时候,时间主要耗费在了IO中。如果是100K(换成500K也并没有提高执行的速度)取一个字符计算大约10秒以内。但是如果全部读取可能要60秒或者更多。对于大文件建议使用一些文件相关信息和部分文件内容做MD5.比如用文件长度和一定间隔取一些字节。 参考技术AJava获取1G文件的MD5值速度和写的java程序的算法以及运行java程序的机器配置有很大的关系,所需时间没法估算,下面是Java获取文件MD5的代码:
package cdm;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import org.apache.commons.codec.digest.*;
import org.apache.commons.io.IOUtils;
public class testMD5
public static String getMd5ByFile(File file) throws FileNotFoundException
String value = null;
FileInputStream in = new FileInputStream(file);
try
MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(byteBuffer);
BigInteger bi = new BigInteger(1, md5.digest());
value = bi.toString(16);
catch (Exception e)
e.printStackTrace();
finally
if(null != in)
try
in.close();
catch (IOException e)
e.printStackTrace();
return value;
public static void main(String[] args) throws IOException
String path="E:\\文件.zip";
String v = getMd5ByFile(new File(path));
System.out.println("MD5:"+v.toUpperCase());
FileInputStream fis= new FileInputStream(path);
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));
IOUtils.closeQuietly(fis);
System.out.println("MD5:"+md5);
//System.out.println("MD5:"+DigestUtils.md5Hex("WANGQIUYUN"));
参考技术B md5现在的计算算法性能没啥差的
要看你电脑速度了 参考技术C 这个问题真的是不好问答, 和你写的java程序的算法有关系, 和运行java程序的机器也有关系, 所以没有一个定论的! 个人看法! 参考技术D 获取是指文件传输吗?如果是单纯的文件传输,那么和开发语言没什么关系吧追问
我在网上找来一个 用Java获取文件md5的例子 但是我的文件一般都很大,想知道超过1G文件大概要多久.评估我方案看可行不
JAVA中获取文件MD5值的方法
1 DigestUtils.md5Hex(new FileInputStream(path));
如果你只需要使用标准的MD5,其实一行代码就够了,JAVA自带的commons-codec包就提供了获取16进制MD5值的方法。其底层实现上,也是分多次将一个文件读入,类似方法三。所以性能上也不错。
总结:其实方法都是类似的,推荐使用这个方法,简洁且性能不错,当然,如果要做一些调整什么的,可以根据自己的需求进行方法的选择。
PS:其实还有一个重点,就是如何知道自己生成的MD5值是否正确呢?
方法很多,其实有一个挺简单的方法,不需要另外安装什么软件。使用windows自带的命令即可:certutil -hashfile [文件路径] MD5,例子如下:
以上是关于java 获取1G文件md5 要多久的主要内容,如果未能解决你的问题,请参考以下文章