讯雷下载的核心思想是校验文件的md5值,两个文件若md5相同则为同一文件。

当得到用户下载某个文件的请求后它根据数据库中保留的文件md5比对出拥有此文件的url,

将用户请求挂接到此url上并仿造一个虚假的断点续传请求,从若干url上将一个正常文件拼接出来。

查了下资料,java也可以实现文件md5校验码获取,代码如下:

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.nio.MappedByteBuffer;

import java.nio.channels.FileChannel;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class MD5Util {

protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f' };

protected static MessageDigest messagedigest = null;

static{

try{

messagedigest = MessageDigest.getInstance("MD5");

}catch(NoSuchAlgorithmException nsaex){

System.err.println(MD5Util.class.getName()+"初始化失败,MessageDigest不支持MD5Util。");

nsaex.printStackTrace();

}

}

public static String getFileMD5String(File file) throws IOException {

FileInputStream in = new FileInputStream(file);

FileChannel ch = in.getChannel();

MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, file.length());

messagedigest.update(byteBuffer);

return bufferToHex(messagedigest.digest());

}

public static String getMD5String(String s) {

return getMD5String(s.getBytes());

}

public static String getMD5String(byte[] bytes) {

messagedigest.update(bytes);

return bufferToHex(messagedigest.digest());

}

private static String bufferToHex(byte bytes[]) {

return bufferToHex(bytes, 0, bytes.length);

}

private static String bufferToHex(byte bytes[], int m, int n) {

StringBuffer stringbuffer = new StringBuffer(2 * n);

int k = m + n;

for (int l = m; l < k; l++) {

appendHexPair(bytes[l], stringbuffer);

}

return stringbuffer.toString();

}

private static void appendHexPair(byte bt, StringBuffer stringbuffer) {

char c0 = hexDigits[(bt & 0xf0) >> 4];

char c1 = hexDigits[bt & 0xf];

stringbuffer.append(c0);

stringbuffer.append(c1);

}

public static boolean checkPassword(String password, String md5PwdStr) {

String s = getMD5String(password);

return s.equals(md5PwdStr);

}

public static void main(String[] args) throws IOException {

long begin = System.currentTimeMillis();

//2EA3E66AC37DF7610F5BD322EC4FFE48 670M 11s kuri双核1.66G 2G内存

File big = new File("e:/新建文件夹.rar");

String md5=getFileMD5String(big);

long end = System.currentTimeMillis();

System.out.println("md5:"+md5+" time:"+((end-begin)/1000)+"s");

}

}

转载自:http://blog.sina.com.cn/s/blog_53d3c24a0100mpm1.html

java 文件md5校验_Java 获取 文件md5校验码相关推荐

  1. java获取文件的所有者_java获取文件夹下所有文件的名称 | 星尘

    大体思路:先获取路径,接着查询当前目录下是否存在文件,如果不存在就结束程序,返回null.如果存在就判断是目录还是文件. import java.io.File; public class GetFo ...

  2. java获取扩展名_Java获取文件扩展名称

    有时在处理文件时,需要根据文件类型对它们进行不同的处理. java.io.File没有任何获取文件扩展名的方法,这里提供了一个实用工具方法来获取文件扩展名. Java获取文件扩展名 在句点(.)之后, ...

  3. ssm上传文件进度条_Java 单文件、多文件上传 / 实现上传进度条

    日常,工作 在这里总结一下上传吧(是以前做过的练习,就汇总到个人博客吧) java ssm 框架实现文件上传 实现:单文件上传.多文件上传(单选和多选),并且用 ajax 异步刷新,在当前界面显示上传 ...

  4. php put怎么接收文件,php,restful_PHP PUT方式传文件的话,如何获取文件内容呢 ?,php,restful,http - phpStudy...

    PHP PUT方式传文件的话,如何获取文件内容呢 ? 最近因为在做前后端分离,后端PHP所有Api都使用RESTFul风格. 但是在使用PUT上传文件的时候,发现$_FILES没有文件信息(可能没有上 ...

  5. java 获取md5值报错_java获取文件的MD5值

    package com.sichang.util; import java.io.File; import java.io.FileInputStream; import java.math.BigI ...

  6. java 文件的md5值_Java计算文件的MD5值

    import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.securi ...

  7. linux获取文件的md5,linux shell 获取文件md5的命令linux操作系统 -电脑资料

    下面我给各位朋友总结一下在linux中利用shell命令来获取文件md5及遍历目录下所有文件的md5的例子,希望此例子对各位同学会有所帮助, 获取文件的MD5值: $ md5sum linuxmint ...

  8. java获取文件地址吗_java获取文件所在服务器位置路径

    1.通过 import javax.servlet.ServletContext 类获取web 服务器所在真实路径 public ActionForward execute( ActionMappin ...

  9. java获取文件后缀_Java获取文件后缀的两种方式

    在对文件进行操作的时候,我们经常需要用到文件的后缀.但是Java API中并没有提供获取文件后缀的方法.下面的工具方法可以帮助我们实现这个目的. 方法1 代码示例: package org.4spac ...

最新文章

  1. 「留光」1小时:中科大让我们离「量子U盘」又近了一步
  2. 网页模板制作只为满足用户需求!
  3. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_基元类型(三)
  4. DevIL真是好用得想哭
  5. “睡服”面试官系列第九篇之数值的扩展(建议收藏学习)
  6. CSS 让数字滑动显示
  7. 工作任务:解决双主控丢配置的问题
  8. 纯css3云彩动画效果
  9. html元素按压高亮效果
  10. openstack mysql配置_《OpenStack云计算实战手册(第2版)》一2.3 用MySQL配置OpenStack镜像服务-阿里云开发者社区...
  11. 《AutoCAD 2016中文版从入门到精通》——- 导读
  12. mac连接Linux工具推荐,mac最值得关注的终端工具,你知道几个?
  13. EasyCHM(CHM电子书制作工具) v3.84.545 绿色版
  14. 中望cad自定义快捷键命令_中望cad常用快捷键及命令
  15. 2020-10-28-Requests及爬虫清单
  16. 如何将计算机c盘分区,无损调节电脑C盘分区,让C盘空间不再尴尬(超实用)
  17. 维基百科数据导入mysql数据库并进行检索操作
  18. Red5 Client 调用 Red5 Server
  19. mysql 触发器 修改记录_mysql触发器
  20. Hadoop认识初体验

热门文章

  1. 查询慢 跑批慢 性能低怎么办? | 润乾高性能计算专家
  2. C# Windows基础拾遗01—线条绘制篇
  3. Android 4.2.2原生Launcher修改使之可以运行过程小结
  4. 统计每天某一时间段的SQL语句
  5. 【Win8启动后自动进入传统桌面设置】
  6. Hadoop:The Definitive Guid 总结 Chapter 7 MapReduce的类型与格式
  7. UVA 10304 Optimal Binary Search Tree
  8. Aps.Net WebApi依赖注入
  9. WC前的颓废——带花树
  10. 获取网页各种宽高的值