Java在linux上生成大文件的md5时的问题
使用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(13)
请问你的文件时多大的啊? 用Java生成的md5和用md5sum生成的md5是一样的吗?
你的Java代码是用的我上面贴的那部分代码吗? 我用的jdk是1.6的,我也换个试试看
回复
2.5G和10G都没问题。文件内容我纯随机的。好像暂时没1.6我晚上试试。代码就是你那个
回复
不知道呢,JDK的CRC32记得是个本地实现
回复
终于找到问题的原因了,我的代码传入的ftp得到的InputStream,由于ftp没有设置为二进制,导致了这个问题,谢谢了。另外请问你是否知道Java的CRC32的多项式是什么吗?用Java代码生产的CRC32始终和Linux下cksum生成的不一样
我试了下 64位的系统64位的jdk7结果是对的
难道就没有人知道了么?
回复
确定windows是32位的,而且jdk也是32位的。
@xiaoskery linux上换个64位jdk的试试就知道啦
回复
现在也是这么想的,正在搭建环境。
回复
已经试过了,问题还是存在。
@xiaoskery
那就不知道啦。看到别人的评论好像jdk7正常?
你是32位系统吗?