java 获取1G文件md5 要多久

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 获取1G文件md5 要多久相关的知识,希望对你有一定的参考价值。

我使用了部分取值的方式来提高MD5的计算速度,这样的时候,时间主要耗费在了IO中。如果是100K(换成500K也并没有提高执行的速度)取一个字符计算大约10秒以内。但是如果全部读取可能要60秒或者更多。对于大文件建议使用一些文件相关信息和部分文件内容做MD5.比如用文件长度和一定间隔取一些字节。 参考技术A

Java获取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 要多久的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中获取文件的 MD5 校验和

java 使用Apache DigestUtils获取文件md5以获取校验和

安卓获取文件MD5值

java获取文件的md5值

JAVA获取资料的MD5码,比较两个文件是不是相同怎么解决

如何用java获取ftp服务器上文件的md5校验码?