使用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. 当文件 >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
你可以试试
for (int i=0; i < b.length; i++) {
result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
}来将你的byte array转为hex string,看看有变化没