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

xiaoskery 发布于 2013/02/21 20:50
阅读 1K+
收藏 0

使用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;
        }
    }
}

加载中
0
ExtremeTalk
ExtremeTalk
你是32位系统吗?
上古进程
上古进程
@xiaoskery 13那就不知道啦。看到别人的评论好像jdk7正常?
xiaoskery
xiaoskery
回复 @上古进程 : 已经试过了,问题还是存在。
xiaoskery
xiaoskery
回复 @上古进程 : 现在也是这么想的,正在搭建环境。
上古进程
上古进程
@xiaoskery linux上换个64位jdk的试试就知道啦
xiaoskery
xiaoskery
回复 @上古进程 : 确定windows是32位的,而且jdk也是32位的。
下一页
0
xiaoskery
xiaoskery
难道就没有人知道了么?
0
逝水fox
逝水fox

我试了下 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

逝水fox
逝水fox
回复 @xiaoskery : 不知道呢,JDK的CRC32记得是个本地实现
xiaoskery
xiaoskery
回复 @逝水fox : 终于找到问题的原因了,我的代码传入的ftp得到的InputStream,由于ftp没有设置为二进制,导致了这个问题,谢谢了。另外请问你是否知道Java的CRC32的多项式是什么吗?用Java代码生产的CRC32始终和Linux下cksum生成的不一样
逝水fox
逝水fox
回复 @xiaoskery : 2.5G和10G都没问题。文件内容我纯随机的。好像暂时没1.6我晚上试试。代码就是你那个
xiaoskery
xiaoskery
你的Java代码是用的我上面贴的那部分代码吗? 我用的jdk是1.6的,我也换个试试看
xiaoskery
xiaoskery
请问你的文件时多大的啊? 用Java生成的md5和用md5sum生成的md5是一样的吗?
返回顶部
顶部