ZLIB算法学习

  我们的游戏资源数据、例如图片、声音、脚本等,都是使用gzip压缩的。之前做BREW的时候,大部分手机支持BREW的ZIP解压接口,有的不支持,只好在网上找了一份解压的代码。找的代码好像在解析压缩数据头部信息时,有点bug。另外在一些超低端机型上,解压过程中会死机,怀疑是解压需要的内存过大的原因。因为不熟悉gzip压缩的原理,当时胡乱改了改,有些问题也不了了之了。


  现在转做智能平台,看到很多引擎里都使用了zlib模块。上网查了查,发现zlib和gzip是使用的同样的压缩算法(deflate,另外png也是使用的这个噢)。但是我们在使用zlib解压gzip压缩的数据时也遇到了一些问题,后来发现是对zlib的接口不熟悉导致的误用。经过这几次挫折,以及见识了zlib应用的广泛,我决定花些时间啃啃这块硬骨头,开始阅读zlib的源代码。


  这里先说一下zlib接口的事情。zlib被设计成在内存有限的情况下,可以压缩解压远远超出内存大小的数据的能力,因此它提供的接口,也大多是对数据进行一段段的处理。我们使用时,图省事,直接使用它提供的一个一次解压的函数uncompress,但是这个函数实际上在zlib的默认条件下,无法识别gzip的头部信息。查看这个函数的源代码,发现它只不过是对zlib一些公共接口的封装。参照它的写法,只是修改一下deflateInit2函数的一个参数,就可以解压gzip数据了。


   通过阅读源码直接理解zlib算法,对我还是一件比较困难的事情。建议先看看源代码doc目录下的几个zlib标准文档、以及zlib网站上的技术解释文章。下面说下我对ZLIB算法的一些理解。


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值