Java压缩和解压缩(五)总结一

Java压缩和解压缩
placeholder image
admin 发布于:2023-03-05 00:31:36
阅读:loading

1.基本介绍

本文将是对前面4篇Java压缩和解压缩的实现总结,包括个人的经验总结。总的来说更多的还是建立在运用的层面,对于更多的理论知识和底层实现原理层面的还需要看个人自己的掌握程度,如果有兴趣还是建议自行去各个官网上查阅资料,或者使用其它自己熟练掌握的学习方式进行深度研究。

使用Java压缩和解压缩文件的实现,目前掌握的有JDK内置的java.util.zip包、开源项目zip4j、开源项目Apache Commons Compress、开源项目7-Zip-Jbinding,实际还有一种就是使用Java的Runtime类,来调用系统本地安装的压缩软件,通过cmd的命令行来执行文件的压缩和解压缩,但这种方式一半还是不特别建议使用,也算是不得已时的一种实现方案。本文将介绍前面4种实现方式,详细参考如下文所示。

2.JDK内置

Java内置的java.util.zip包,无需其它第三方依赖,仅提供了zip格式的压缩和解压缩,不支持基于密码的压缩和解压缩,适用于较为非常基础层的应用,以JDK6为例,内置的java.util.zip包提供的类参考为:

image.png

由上图可以看出总共的类也就只有这么几个,通过命名并未找到关于加密的命名,所以仅对于zip格式的支持(目前仅使用过JDK内置操作zip格式文件的实现,其它格式未了解使用的支持),且不涉及到压缩密码和解压缩密码时可以考虑使用,实际JDK内置的API在生成过程中,对于空文件夹需要特殊处理,本站提供的程序也有进行特别处理。

3.开源项目Zip4j

最强的zip格式的支持实现,API简单,功能强大,支持zip格式的密码压缩和密码解压。参考网站:“https://gitee.com/mirrors/zip4j”(此仓库是为了提升国内下载速度的镜像仓库,每日同步一次,原始仓库为Github上的地址)、“https://github.com/srikanth-lingala/zip4j”、“http://www.lingala.net/zip4j”(地址打不开)。

特别说明:在实际应用中,某些带密码的zip格式文件的解压缩出现了错误,因为文件来源不确定,是否为程序生成还是人工生成的也不可知,总之异常的堆栈提示为密码错误,实际手工解压缩时密码并未错误,最终也未知是何种原因导致,最终的兜底方案是“正常使用zip4j来解压文件,当判断需要密码时使用密码解压,当使用密码解压失败时再使用7-Zip-Jbinding组件进行解压,该组件也算杠杠的,解压成功”。

如果对于压缩和解压缩的范围可控,只使用到zip格式时,建议优先使用Zip4j项目。

4.开源项目Apache Commons Compress

作为Apache Commons项目下的子项目存在,Compress支持的压缩和解压缩范围较广,常见的压缩文件格式都可以支持压缩和解压缩,需要注意不支持rar格式、不支持7z格式的带密码压缩。参考网站:https://commons.apache.org”、“https://gitbox.apache.org/repos/asf/commons-compress.git”。

如果需要支持压缩和解压缩的文件范围较广,建议优先使用Apache Commons Compress项目。

5.开源项目7-Zip-Jbinding

跨平台、高性能,内置三大操作系统的动态链接库,支持rar4和rar5格式的压缩和解压缩,参考网站:“https://sevenzipjbind.sourceforge.net/”、“https://sourceforge.net/projects/sevenzipjbind/”、“https://github.com/borisbrodski/sevenzipjbinding”。压缩和解压缩的代码实现有兼容,或许是根据文件后缀的兼容,亦或许是根据文件字节内容的识别,它支持动态适配文件的格式,调用对应格式的压缩和解压缩,在调用的逻辑上非常方便。

如果追求性能(性能这块我个人并未查证资料,只是单纯的认为底层使用c++实现就应比Java高而已),需要兼容rar格式,可优先使用7-Zip-Jbinding项目。

6.其它说明

(1)相关代码实现和介绍可参见各自对应的文章实现篇;

(2)如果追求不限制压缩和解压的文件格式,可将上述三者混用,对于zip格式使用Zip4j、对于7z格式使用Apache Commons Compress、对于rar格式的支持使用7-Zip-Jbinding


 点赞


 发表评论

当前回复:作者

 评论列表


留言区