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

解决方案 »

  1.   

    自己顶一下,希望csdn上有高手能解决这个问题
      

  2.   

    看起来像个32bit里int越界的问题,但是看了半天你代码看不到啥问题,也可能是因为BigInteger toString时会去掉前面的0,
    你可以试试
    for (int i=0; i < b.length; i++) {
               result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
           }来将你的byte array转为hex string,看看有变化没