前天第一次发表博客到论坛,关于Java文件监控一文,帖子地址在:http://www.iteye.com/topic/1127281
评论的朋友很多,下载代码的朋友很不少,感谢在论坛上看我帖子的朋友,还有回复评论的朋友,给我提供建议的朋友。
从这些建议中,虽然语言简短,但是却有的是一语中的,这里说一下一下关于帖子的代码中HashFile中的MD5文件校验算法,
该算法是使用Java自带的MessageDigest类,测试结果,获取一个2G文件的MD5码,耗时 971秒,这效率太给力了,可以用坑爹来形容,所以用MD5文件校验码来判断文件是否被修改,对于小文件来说可能还合适,要是对大文件来说,好吧,撞墙死了算了!
HashFile中的代码是这样子的:
import java.io.FileInputStream; import java.io.InputStream; import java.security.MessageDigest; public class HashFile { /** * @param args */ public static char[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; public static String getHash(String fileName, String hashType) throws Exception { InputStream fis; fis = new FileInputStream(fileName); byte[] buffer = new byte[1024]; MessageDigest md5 = MessageDigest.getInstance(hashType); int numRead = 0; while ((numRead = fis.read(buffer)) > 0) { md5.update(buffer, 0, numRead); } fis.close(); return toHexString(md5.digest()); } public static String toHexString(byte[] b) { StringBuilder sb = new StringBuilder(b.length * 2); for (int i = 0; i < b.length; i++) { sb.append(hexChar[(b[i] & 0xf0) >>> 4]); sb.append(hexChar[b[i] & 0x0f]); } return sb.toString(); } }
测试结果:
真给力啊,超过2G,效率变成这样 !
好吧,自带的MD5算法,上当了,对于检查文件是否更新这个问题来说,现在我使用的解决办法是File 类的lastModified方法,代码这样
private String getHash(String fp){ File file = new File(fp); return String.valueOf(file.lastModified()); }
通过比较文件的最后修改时间来判断文件是否更新,对大文件也轻松拿下,
测试结果是这样:
当然针对不同问题肯定是有不同的解决办法,写这个博客的目的是告诉大家不要盲目相信JDK,Java自带的东西也有一定适用范围,有局限性,珍惜生命,请不要盲目相信JDK
分析原来HashFile代码,获取MD5校验码的瓶颈是出现在
public static String getHash(String fileName, String hashType) throws Exception { InputStream fis; fis = new FileInputStream(fileName); byte[] buffer = new byte[1024]; MessageDigest md5 = MessageDigest.getInstance(hashType); int numRead = 0; while ((numRead = fis.read(buffer)) > 0) { //瓶颈 md5.update(buffer, 0, numRead); } fis.close(); return toHexString(md5.digest()); }
在上面代码中,while循环N次,2G的文件,循环1024 * 1024 * 2 次,不给力!
相关推荐
MD5校验算法源码,包含md5.c md5.h 及一个使用例子源码文件,添加头文件后可以直接使用。
java MD5 校验
CRC16校验算法及十六进制和十六进制字符串转换
Java实现MD5大文件校验码详细解析: 包括具体方法解释、注释 通俗易懂、易于理解
md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器md5校验器
文件校验工具 MD5 校验王中文版文件校验工具 MD5 校验王中文版 MD5 校验王可以对任意文件进行版本,文件时间,MD5值,SHA1值,CRC32值的校验。 计算选项: 版本:当选择校验文件为exe或者dll文件时,在运算结果中...
C++md5校验源码
NULL 博文链接:https://eof.iteye.com/blog/2152405
对接接口时用到的一种常用加密算法,常用于验证签名,使用shiro-all-1.4.1.jar,可自行下载
由于需要和蓝牙通讯,协议需要用到校验和,找了很久才找到,给大家共享。java校验和算法绝对可以用。
MD5校验器 免安装 很好用 速度快 精准 MD5校验(checksum)是通过对接收的传输数据执行散列运算来检查数据的正确性。 一个散列函数,比如 MD5,是一个将任意长度的数据字符串转化成短的固定长度的值的单向操作。任意...
Vb中的MD5校验算法源码及示例,用MD5分别检验同一个字符串,得到不同的结果。请看示例运行截图,如上示。
基于 MD5 算法的文件完整性校验程序,本实验使用 C++ 语言在 Linux 平台进行编程和运行。 ./md5 -h 查看帮助 ./md5 -t 打印程序的测试信息 ./md5 -c nankai.txt 计算出的被测文件的 MD5 摘要并打印 ./md5 -v nankai....
MD5自动校验算法程序源代码 MD5-collision-process(c-source-code)
md5校验工具免安装破解版。
6、项目中用到了FAFTS文件系统、MD5校验算法、在线IAP等知识。 7、我用的是RS485协议,可以更改为SPI、IIC、串口、等。 8、程序自己已经在项目中使用,下面工程下载下来后可以直接使用,软件设置参考上面。
用matlab实现的一个md5算法,有详细的注释说明
md5 校验器, 对网上下载的东西进行md5算法校验,防止挂马。md5 校验器, 对网上下载的东西进行md5算法校验,防止挂马。
这是我基于CSDN中一位高手的版本更改的,还算比较好用!!
MD5校验值.zipMD5校验值.zipMD5校验值.zipMD5校验值.zipMD5校验值.zip