java获取文 件的MD5值
2015-11-19 12:49
639 查看
有两种解决方案,一种是用MessageDigest来实现,另种是用org.apache.commons.codec.digest来实现,下面是代码:
测试结果:
由此可以看出用jdk 的java.security.MessageDigest效率上要比org.apache.commons.codec.digest.*这个高一些。
package com.creditease.mobile.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.math.BigInteger; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.security.MessageDigest; import org.apache.commons.codec.digest.*; import org.apache.commons.io.IOUtils; public class MD5Util { /** * 用MessageDigest获取文件的md5值 * @param file * @return * @throws FileNotFoundException */ public static String getMd5ByMessageDigest(String filePath) throws FileNotFoundException { File file = new File(filePath); String value = null; FileInputStream in = new FileInputStream(file); try { MappedByteBuffer byteBuffer = in.getChannel().map( FileChannel.MapMode.READ_ONLY, 0, file.length()); MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(byteBuffer); BigInteger bi = new BigInteger(1, md5.digest()); value = bi.toString(16); } catch (Exception e) { e.printStackTrace(); } finally { if (null != in) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } return value; } /** * 用DigestUtils去获取MD5值 * @param filePath * @return * @throws IOException */ public static String getMd5ByDigestUtils(String filePath) throws IOException{ FileInputStream fis = new FileInputStream(filePath); String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis)); IOUtils.closeQuietly(fis); return md5; } public static void main(String[] args) throws IOException { String path = "E:\\msdia80.dll"; int count = 3000; String v = ""; long s1 = System.currentTimeMillis(); for(int i=0;i<count;i++){ v = getMd5ByMessageDigest(path); } long e1 = System.currentTimeMillis(); System.out.println("MD5:" + v.toUpperCase()+",耗时:"+(e1-s1)+"毫秒"); String v1 = ""; long s2 = System.currentTimeMillis(); for(int i=0;i<count;i++){ v1 = getMd5ByDigestUtils(path); } long e2 = System.currentTimeMillis(); System.out.println("MD5:"+v1+",耗时:"+(e2-s2)+"毫秒"); } }
测试结果:
由此可以看出用jdk 的java.security.MessageDigest效率上要比org.apache.commons.codec.digest.*这个高一些。
相关文章推荐
- you must restart adb and eclipse的相关解决办法
- SSH:Struts1框架(标签的使用)
- 考虑使用JavaConfig替代XML配置
- Java练习题--基本数据类型运算
- SSH:Struts1框架(几种常用的Action)
- Spring_Security_3.0.1中文参考文档 Chapter 8.核心安全过滤器
- java编程实现根据EXCEL列名求其索引的方法
- [Java] 单例模式的学习笔记(Java版)
- java中"no enclosing instance of type * is accessible"的解决方法
- JavaWeb三大组件之Servlet初次见面及生命周期
- Java mail 技术实例
- Java各种排序算法汇总(冒泡,选择,归并,希尔及堆排序等)
- java上传组件FileUpload
- Java
- struts(三) ---OGNL的学习和理解
- Java的七大设计原则
- JavaWeb---文件读取/IO流
- java.lang.OutOfMemoryError异常解决方法
- 关于java中Double类型的运算精度问题
- PhoneGap插件调用Java流程源码分析(二)