昨天联调某接口时发现一个的Bug,还好很快找到原因并紧急修复了。
某文件A.tar.gz使用apache commons-compress计算的MD5值:
FileReader fr= new FileReader(tarFile);
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fr));
IOUtils.closeQuietly(fr);
System.out.println("MD5:"+md5);
与使用命令:
md5sum A.tar.gz
后显示的MD5值竟然不一样。
话说当时还真就奇怪了,难道commons compress有Bug?
其实不然。
问题是出在了FileReader上:Reader是按字符读取文件,而InputStream是按字节读取文件。此处是压缩文件而不是文本文件,使用Reader读取后计算的MD5值是错误的。改成这样:
FileInputStream fis= new FileInputStream(tarFile);
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));
IOUtils.closeQuietly(fis);
System.out.println("MD5:"+md5);
这样再和md5sum做比较,发现结果就完全相同了。
希望对大家有所帮助。
标签:fis,fr,引发,IOUtils,MD5,Bug,md5 From: https://blog.51cto.com/u_6978506/7470416