在应用开发中往往需要将下载成功的文件进行MD5校验,就是获取一个文件的消息摘要,每个文件生成的摘要都是独一无二的,生成的消息摘要是128位(16个字节)的数据,一般都需要将他们转换成十六进制的字符串。将十进制数转换成十六进制可以使用Integer.toHexString(int num),只要低八位可以使用0xff & num就只会截取32位的整型数值的低八位。
测试程序:
MessageDigest degest = MessageDigest.getInstance("MD5"); FileInputStream inputStream=new FileInputStream("test.txt"); DigestInputStream dis=new DigestInputStream(inputStream, degest);//对于大文件或者网络文件使用输入流的形式要比字节数组方便很多也节省内存
byte[] buffer=new byte[8986];
ByteArrayOutputStream fileOutput=new ByteArrayOutputStream();
while((dis.read(buffer))!=-1){
//跟读普通输入流是一样的,原理就是需要将输入流读完后,再调用digest方法才能获取整个文件的MD5
fileOutput.write(buffer);
}
String fileContent=fileOutput.toString();//读取到的文件的内容
byte[] sumary=degest.digest(); StringBuffer strBuffer = new StringBuffer(); for (int i = 0; i < sumary.length; i++) {
String tmp=Integer.toHexString(sumary[i]&0xff);
if(tmp.length()==1)//如果这个字节的值小于16,那么转换的就只有一个字符,所以需要手动添加一个字符“0”,
tmp="0"+tmp; strBuffer.append(tmp); } System.out.println(strBuffer.toString());