【步兵 工具篇】lzma算法,压缩字节流 by EOS.
本来上周就打算写的,不过孩子连续高烧,住院了一个礼拜。一个礼拜没回家,还写什么博客。
虽然花了不少钱,好在孩子也恢复过来了,继续努力,挣钱养家(ps:医院真心贵。~)
言归正传,其实今天这篇博客,是一个中间产物,因为在研究热更新,然后就想自己写一套,
下载部分用了curl库,但是文件打包,感觉用zip感觉差点意思,就作死的去研究tar.xz这种格式。
说实话几天过来,感觉到想搞点啥东西,不会英文真是费劲,只能靠悟的 = =、
LZMA
首先一开始研究的是 XZ Utils,在其主页上明显的放着LZMA SDK。
然后 点进去,直接就跑到 7z 的官 了,后来才得知7z也用的是这种算法。。。。
甚至还有对LZMA进行多线程和压缩时间优化的LZMA2算法,不过并没有提供独立lib,
自己搞一通费劲的要死,所以直接选用了LZMA。
其实我的需求并不是算法本身,而是它压缩数据的能力,所以具体算法我并没有过多的研究,
有兴趣的话可以自行研究一下。 不过大致上是对重复序列的特殊处理,可结合下图体会一下。
lib只提供了,一个压缩函数和一个解压函数,十分难用,所以我进行了一下二次封装。
一些压缩解压涉及到的数据都拼到字节流里了,所以看到了十分爽朗的接口~0~
文件压缩
其实我们经常会用到以rb/wb的形式进去文件操作,一是处理起来简单,二是也算一种简单的加密。
fopen、fread、fwrite,当以二进制格式操作的时候,操作的就是字节流。
所以不难想到,我们可以把文件先读进内存,然后再压缩字节流,然后再写会硬盘。
这样就实现了对文件的压缩,反之则是文件的解压。
文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览33838 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!