Java在linux上生成大文件的md5时的问题

发布于 2021-11-22 16:22:18 字数 1247 浏览 843 评论 13

使用Java jdk自带的方法生成大文件的md5码时,出现了诡异的问题。
1. 当文件 >2G的时候
2. 在windows系统上执行得到的结果和在linux上用命令md5sum得到的结果是一样的
3. 但是在linux上执行的时候,得到的结果却和在linux上用命令md5sum得到的居然是不一样的??????

有没有人知道是什么原因或者是遇到这类似的问题啊?

代码如何:

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.MessageDigest;

public class FileDigest
{

    private static byte[] buffer = new byte[1024];

    public static String getMD5(File file)
    {
        int len = 0;
        try
        {
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            InputStream inputStream = new FileInputStream(file);
            while ((len = inputStream.read(buffer)) != -1)
            {
                messageDigest.update(buffer, 0, len);
            }

            BigInteger bigInteger = new BigInteger(1, messageDigest.digest());
            return bigInteger.toString(16);
        }
        catch (Exception e)
        {
            return null;
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(13

筱果果 2021-11-22 18:25:04

请问你的文件时多大的啊? 用Java生成的md5和用md5sum生成的md5是一样的吗?

悲喜皆因你 2021-11-22 18:25:03

你的Java代码是用的我上面贴的那部分代码吗? 我用的jdk是1.6的,我也换个试试看

静谧 2021-11-22 18:24:39

回复
2.5G和10G都没问题。文件内容我纯随机的。好像暂时没1.6我晚上试试。代码就是你那个

残花月 2021-11-22 18:24:35

回复
不知道呢,JDK的CRC32记得是个本地实现

输什么也不输骨气 2021-11-22 18:24:35

回复
终于找到问题的原因了,我的代码传入的ftp得到的InputStream,由于ftp没有设置为二进制,导致了这个问题,谢谢了。另外请问你是否知道Java的CRC32的多项式是什么吗?用Java代码生产的CRC32始终和Linux下cksum生成的不一样

疾风者 2021-11-22 18:24:22

我试了下 64位的系统64位的jdk7结果是对的

[root@fox Test]# md5sum file

68bb4c82dda8a649124a651e432ff594 file

[root@fox Test]# ll -h file

-rw-rw-r-- 1 fox fox 2.5G 2月 22 14:50 file

[root@fox Test]# java org.fox.Main

68bb4c82dda8a649124a651e432ff594

无法言说的痛 2021-11-22 18:23:54

难道就没有人知道了么?

屌丝范 2021-11-22 18:23:11

回复
确定windows是32位的,而且jdk也是32位的。

等风来 2021-11-22 18:21:30

@xiaoskery linux上换个64位jdk的试试就知道啦

能否归途做我良人 2021-11-22 18:06:00

回复
现在也是这么想的,正在搭建环境。

恋你朝朝暮暮 2021-11-22 18:04:10

回复
已经试过了,问题还是存在。

半世蒼涼 2021-11-22 17:47:12

@xiaoskery
13那就不知道啦。看到别人的评论好像jdk7正常?

酷到爆炸 2021-11-22 16:40:55

你是32位系统吗?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文