Android开发探索androidAndroid学习

Android多种格式的异步解压/压缩解决方案

2016-08-28  本文已影响7008人  NKming

前言

最近由于项目需要,需要我谅解一下关于在移动平台的解压功能,在移动平台解压,我个人感觉是没有太大必要的,毕竟手机的性能有限。但是,不口否认,移动端的解压功能又是必备的,因为如果对于一些资源管理器类的应用,接入解压功能,会更完全,例如:资源管理器、手机QQ、UC浏览器等一些列应用,涉及到文件的管理与传输,那么查看压缩包下的内容就会显得十分必要了。所以说,如果有必要的话,移动应用还是需要支持的解压的功能的。

压缩文件介绍

既然要解压,那就必须先了解压缩文件,这篇文章只是初稿,所以这里就先介绍几种常见的压缩文件格式,以后会慢慢补充。

  1. zip格式,ZIP是一个计算机文件的压缩的算法,原名Deflate(真空),发明者为菲利普·卡兹(Phil Katz)),他于1989年1月公布了该格式的资料。ZIP通常使用后缀名“.zip”,它的MIME格式为 application/zip 。目前,ZIP格式属于几种主流的压缩格式之一,其竞争者包括RAR格式以及开放源码的7-Zip格式。从性能上比较,RAR格式较ZIP格式压缩率较高,但是它的压缩时间远远高于Zip。而7-Zip由于提供了免费的压缩工具而逐渐在更多的领域得到应用)。
  1. rar格式,同样是无损数据压缩,RAR文件通常比[IP文件压缩比要高,但是压缩速度较慢。因为RAR文件头也要占据一定空间,在数据压缩余地不大时,压缩过的文件可能比原文件要大。RAR的一个主要优点是可以把文件压缩目标分割到多个文件,并且很容易从这样的分割的压缩文件解压出源文件,其MIME格式为application/x-rar-compressed
  2. 7z格式,7z 是一种主流高效的压缩格式,它拥有极高的压缩比。在计算机科学中,7z是一种可以使用多种压缩算法进行数据压缩的档案格式。该格式最初被7-Zip实现并采用,但是这种档案格式是公有的,并且7-Zip软件本身亦在GNU宽通用公共许可证(GNU LGPL)协议下开放源代码。目前LZMA软件开发工具包的最新版本为V9.34。7z格式的MIME类型为application/x-7z-compressed
�解压过程的显示

具体来介绍下解压各个格式的方法

zip解压的主要步骤

解压过程是在一个线程里运行,然后会通过handler回调到ui线程中,通知相应地解压进度以及相关信息.
具体效果如下:

由此,zip文件格式的解压过程至此为止。

rar解压方式

其同回调方法是和之前的一致的,所以有兴趣的可以看我的demo。

http://stackoverflow.com/questions/14024874/j7zip-on-android-extracting-from-an-archive-and-listing-contents/14676769#14676769

所以用jbinding的想法是泡汤了,通过上述问题,我找到了**andro7z **这个思路的解决方法,也是提供了相应地c代码,需要我们自己进行编译ndk,打包成动态库来执行。
但是我想有没有更好的方法呢?
经过老大的指点,我找找到了一个github现成的工程AndroidUn7zip
作者已经做好了编译并且打包成了动态库和jar包,所以我们如果有需要的话,可直接把相应地库下载下来就可以运行了:
具体使用方法如下:

�核心代码

由于是采用的ndk的方法,所以我们比较难监听解压的过程,不过对于这种需要高性能的解压的方法,我们也很难去添加进度。
而且作者还对其他的格式解压也经行了封装,可以使用同一个库对不同的格式解压的。

https://github.com/hzy3774/AndroidP7zip
真心感谢老大和作者的指导。

对于还有一种7z的解压方法,就是利用compressor开源库解压,也可以在Android上运行,但是实际使用过程中还是有点问题的,等以后有时间再写具体的文章来说明。

结论

demo结构:

�工程目录
我觉得整个探究过程还是蛮有意思的,学到了许多以前没有接触到的知识,有时间我会把这个demo完善成一个解压类库,到时候就可以直接调用了,欢迎看一下我的这个解压demo,希望有能力的可以完善这个demo。
上一篇下一篇

猜你喜欢

热点阅读