首页 > 代码库 > 使用摘要流获取文件的MD5
使用摘要流获取文件的MD5
摘要流是过滤流的一种,使用它可以再读取和写入流时获取流的摘要信息(MD5/SHA).
使用摘要流包装流时,需要额外传递一个MessageDigest对象,
MessageDigest md=MessageDigest.getInstance("MD5");DigestInputStream dis=new DigestInputStream(in, md);
摘要流复写了流的read、write方法,方法内部调用MessageDigest对象的upate()来更新摘要信息
public int read() throws IOException { int ch = in.read(); if (on && ch != -1) { digest.update((byte)ch); } return ch; }
调用MessageDigest对象的getDigest()可以获得摘要信息的byte[],通常情况我们需要获取字符串形式的MD5值,所以需要进行转换
/** * 将字节数组转为十六进制字符串 * * @param bytes * @return 返回16进制字符串 */ public static String byteArrayToHex(byte[] bytes) { // 字符数组,用来存放十六进制字符 char[] hexReferChars = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘ }; // 一个字节占8位,一个十六进制字符占4位;十六进制字符数组的长度为字节数组长度的两倍 char[] hexChars = new char[bytes.length * 2]; int index = 0; for (byte b : bytes) { // 取字节的高4位 hexChars[index++] = hexReferChars[b >>> 4 & 0xf]; // 取字节的低4位 hexChars[index++] = hexReferChars[b & 0xf]; } return new String(hexChars); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。