java - 使用 Java 为大文件生成 MD5 非常慢

标签 java performance file md5 checksum

我正在使用 Java 为一些文件生成 MD5 散列。我需要为几个总大小约为 1 GB 的文件生成一个 MD5。 这是我的代码:

private String generateMD5(SequenceInputStream inputStream){
    if(inputStream==null){
        return null;
    }
    MessageDigest md;
    try {
        int read =0;
        byte[] buf = new byte[2048];
        md = MessageDigest.getInstance("MD5");
        while((read = inputStream.read(buf))>0){
            md.update(buf,0,read);
        }
        byte[] hashValue = md.digest();
        return new String(hashValue);
    } catch (NoSuchAlgorithmException e) {
        return null;
    } catch (IOException e) {
        return null;
    }finally{
        try {
            if(inputStream!=null)inputStream.close();
        } catch (IOException e) {
            // ...
        }
    } 

这似乎永远运行。 如何提高效率?

最佳答案

您可能想要使用 Fast MD5图书馆。它比 Java 的内置 MD5 提供程序快得多,并且获取哈希非常简单:

String hash = MD5.asHex(MD5.getHash(new File(filename)));

请注意,缓慢的速度也可能是由于文件 I/O 缓慢造成的。

关于java - 使用 Java 为大文件生成 MD5 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9321912/

相关文章:

java - 使用intent.action.VIEW打开文件时如何获取文件URI?

Java 无法从 CLASSPATH 加载类

Java SSH 工具 : pause download with SftpClient

java - 使用 Lucene 搜索有多少结果?

java - List.Add 在 Java 中意外多次添加相同的内容

javascript - 无法通过将文件拖放到按钮外的区域来选择文件,但仅在使用 Shadow DOM 时才在输入内

java - 我们可以在 Java 6 中使用一些 JavaFX 类吗?

SQL 索引 - 计算列与计算列使用的字段

java - JSF——替代 "rendered="?

c++ - 如何修复 STAMPS 挑战中的 SPOJ 时间限制超出错误?