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

芸芸芸芸 2013-02-21 08:52:55
使用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;
}
}
}
...全文
226 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yktd26 2013-02-21
  • 打赏
  • 举报
回复
看起来像个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,看看有变化没
芸芸芸芸 2013-02-21
  • 打赏
  • 举报
回复
自己顶一下,希望csdn上有高手能解决这个问题

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧