JAVA文件的MD5获取方法

简介: JAVA文件的MD5获取方法

在昨天写的《JAVA并发处理大文件切分》一文中提到了获取文件MD5的方法,使用到了使用到了apache common-codec中的方法,使用该方法获取整个文件的md5的代码如下:

Stringmd51=DigestUtils.md5Hex(newFileInputStream(filename));

下面带来另一种获取文件MD5的方法,就是java自带的NIO的方法,而且该方法的效率比上述方法还高,代码如下:

publicStringgetMD5(StringfilePath) throwsException {
MessageDigestmd=MessageDigest.getInstance("MD5");
FileInputStreamfis=newFileInputStream(filePath);
FileChannelchannel=fis.getChannel();
ByteBufferbuffer=ByteBuffer.allocate(1024*1024);
while (channel.read(buffer) !=-1) {
buffer.flip();
md.update(buffer);
buffer.clear();
    }
channel.close();
fis.close();
byte[] digest=md.digest();
StringBuildersb=newStringBuilder();
for (byteb : digest) {
sb.append(String.format("%02x", b&0xff));
    }
returnsb.toString();
}

做了一下时间比较实验,如下:

Stringfilename="C:\\tools\\graalvm-ce-java17-windows-amd64-22.3.1.zip";
longstartTime1=System.currentTimeMillis();
Stringmd51=DigestUtils.md5Hex(newFileInputStream(filename));
System.out.println(JSON.toJSONString(md51));
System.out.println(System.currentTimeMillis()-startTime1);
longstartTime2=System.currentTimeMillis();
Stringmd52=getMD5(filename);
System.out.println(JSON.toJSONString(md52));
System.out.println(System.currentTimeMillis()-startTime2);

结果输出如下:

"63c4ab57b76a33ed664ca588e9b4bc44"
1611
"63c4ab57b76a33ed664ca588e9b4bc44"
781

耗时差距一倍,果断替换一下,还不用引入第三方库了,jdk本人使用的是17,如果有使用其他版本的jdk,可以自行测试一下,不保证一定比apache的效率高。

目录
相关文章
|
2天前
|
Java 开发者
Java一分钟之-Java IO流:文件读写基础
【5月更文挑战第10天】本文介绍了Java IO流在文件读写中的应用,包括`FileInputStream`和`FileOutputStream`用于字节流操作,`BufferedReader`和`PrintWriter`用于字符流。通过代码示例展示了如何读取和写入文件,强调了常见问题如未关闭流、文件路径、编码、权限和异常处理,并提供了追加写入与读取的示例。理解这些基础知识和注意事项能帮助开发者编写更可靠的程序。
8 0
|
2天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
|
2天前
|
存储 Java API
掌握8条方法设计规则,设计优雅健壮的Java方法
掌握8条方法设计规则,设计优雅健壮的Java方法
|
3天前
|
Java C语言
详解java方法与递归
详解java方法与递归
9 3
|
3天前
|
Java
JDK环境下利用记事本对java文件进行运行编译
JDK环境下利用记事本对java文件进行运行编译
9 0
|
3天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
9 0
|
4天前
|
Java
Java一分钟之-方法定义与调用基础
【5月更文挑战第8天】本文介绍了Java编程中的方法定义和调用,包括基本结构、常见问题和避免策略。方法定义涉及返回类型、参数列表和方法体,易错点有返回类型不匹配、参数错误和忘记返回值。在方法调用时,要注意参数传递、静态与非静态方法的区分,以及重载方法的调用。避免错误的策略包括明确返回类型、参数校验、理解值传递、区分静态和非静态方法以及合理利用重载。通过学习和实践,可以提升编写清晰、可维护代码的能力。
13 0
|
5天前
|
Arthas 安全 Java
java服务报错 FileNotFoundException:打开的文件过多
java服务报错 FileNotFoundException:打开的文件过多
14 0
|
6天前
|
搜索推荐 Java Shell
8大Java排序方法(由简入繁),有代码详解和原理指导
8大Java排序方法(由简入繁),有代码详解和原理指导
29 0
|
8天前
|
Oracle Java 关系型数据库
windows 下 win11 JDK17安装与环境变量的配置(配置简单详细,包含IJ中java文件如何使用命令运行)
本文介绍了Windows 11中安装JDK 17的步骤,包括从官方网站下载JDK、配置环境变量以及验证安装是否成功。首先,下载JDK 17的安装文件,如果没有Oracle账户,可以直接解压缩文件到指定目录。接着,配置系统环境变量,新建`JAVA_HOME`变量指向JDK安装路径,并在`Path`变量中添加。然后,通过命令行(cmd)验证安装,分别输入`java -version`和`javac -version`检查版本信息。最后,作者分享了如何在任意位置运行Java代码,包括在IntelliJ IDEA(IJ)中创建的Java文件,只需去掉包声明,就可以通过命令行直接运行。