本文是描述7z sdk 下C语言的开发使用。

在7zip一个开源的解压缩自由软件,在LGPL协议下,即自由使用,只要你没修改7z里面的源代码,仅仅作为库的引用,勿需公开你的源码。可惜在网上找类似的开发7zip教程解压缩太少,如应用起来也需要折腾一段时间,本文应运而生。

特征

不介绍了官方挺细的。地址:http://sparanoid.com/lab/7z/中文介绍。

支持语言:(C、C++、C#、Java),因为C语言,so它是可以跨平台的,在安卓是可以使用的,比如你用来打包游戏资源,虽安卓apk包本来就是压缩包。

缺点,或者也解压的软件都有通用的特点,就是需要速度,解压的速度是消耗时间,当然有的解压压软件做的速度上杠杠,压缩率就会低。7zip做为相对高压缩率的,它的解压速度有点慢。

VS2013工程生成

  • SDK下载http://sparanoid.com/lab/7z/sdk.html
  • 路径lzma1505CUtil7z,右击7z.dsp用vs2013
  • 修改项目属性:
    • 通用->输出目录修改:$(SolutionDir)$(Configuration).win32
    • 通用->中间目录修改:$(Configuration).win32
    • 链接库->一般修改:$(OutDir)$(ProjectName).exe
  • 退出的时保存默认sln路径

源码说明

本节通过例子来阐述LZMA SDK的使用。项目属性->调试->命令参数

压缩包内容列表

“l” “lzma1505.7z”

解压

“x” “lzma1505.7z”

应用到游戏

思路,笔者没去实现也本想很cocos2d-x里面做个结合,据其他游戏引擎加载压缩包资源也是类似步骤。

  1. add压缩包到游戏资源
  2. 建立map容器:把压缩包文件内容映射进去
  3. 游戏加载的时候通过map查找是否存在这个文件,是加载,分之再从游戏指定的目录搜索文件
  4. 是否需要多线程加载?这点是个补充,多线程加载利于不卡住渲染主线程