Zlib解压工具是一个广泛使用的压缩和解压缩库,主要用于处理数据的压缩和解压缩任务。Zlib使用的是DEFLATE算法,这是一种通用的压缩算法。它被应用在很多场景中,比如压缩文件、网络传输中的数据压缩、以及各种应用程序中的数据存储和读取。
Zlib的代码库相对小巧,因此在嵌入式系统和资源受限的环境中也能很好地使用。
二、演示功能概述
本文主要演示如何对数据压缩解压。
三、准备硬件环境
此核心板的详细使用说明参考:
https://docs.openluat.com/air780e/product/
Air780E产品手册中的<<开发板Core_Air780E使用说明V1.0.5.pdf>>;核心板使用过程中遇到任何问题,可以直接参考这份使用说明pdf文档。
3.1 数据通信线
3.2 PC电脑
四、准备软件环境
4.1 基本的下载调试工具
使用说明参考:
Luatools 工具使用说明:
https://docs.openluat.com/Luatools/
五、ZLIB解压操作软硬件资料
5.1 文档和工具:
最新版本下载链接:
https://docs.openluat.com/air780e/luatos/app/utils/zlib/
-
780E模块使用固件:SDK&Demo-合宙文档中心,本demo使用的固件版本是: LuatOS-SoC_V1112_EC618_FULL.soc -
本教程使用的demo: https://gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/miniz -
将固件和脚本烧录到模块中;
-
源码和固件已打包;
-
zlib-全部api地址,如果只看本demo的api直接看下面的5.2demo使用api介绍即可。
5.2 demo使用api介绍
使用常量
常量 |
类型 |
解释 |
miniz.WRITE_ZLIB_HEADER |
int |
压缩参数,是否写入zlib头部数据,compress函数的默认值 |
miniz.COMPUTE_ADLER32 |
int |
压缩/解压参数,是否计算/校验adler-32 |
miniz.GREEDY_PARSING_FLAG |
int |
压缩参数,是否快速greedy处理,默认使用较慢的处理模式 |
miniz.NONDETERMINISTIC_PARSING_FLAG |
int |
压缩参数,是否快速初始化压缩器 |
miniz.RLE_MATCHES |
int |
压缩参数,仅扫描RLE |
miniz.FILTER_MATCHES |
int |
压缩参数,过滤少于5次的字符 |
miniz.FORCE_ALL_STATIC_BLOCKS |
int |
压缩参数,是否禁用优化过的Huffman表 |
miniz.FORCE_ALL_RAW_BLOCKS |
int |
压缩参数,是否只要raw块 |
miniz.PARSE_ZLIB_HEADER |
int |
解压参数,是否处理zlib头部,uncompress函数的默认值 |
miniz.HAS_MORE_INPUT |
int |
解压参数,是否还有更多数据,仅流式解压可用,暂不支持 |
miniz.USING_NON_WRAPPING_OUTPUT_BUF |
int |
解压参数,解压区间是否够全部数据,仅流式解压可用,暂不支持 |
miniz.compress(data,flags)
作用:快速压缩,需要165KB的系统内存和32KB的LuaVM内存
参数
参数 |
传入值类型 |
解释 |
data |
string |
待压缩的数据,少于400字节的数据不建议压缩,且压缩后的数据不能大于32KB |
flags |
flags |
压缩参数,默认是miniz.WRITE_ZLIB_HEADER,即写入zlib头部 |
返回值
返回值类型 |
解释 |
string |
若压缩成功,返回数据字符串,否则返回nil |
string.fromBase64(str)
作用:将字符串进行base64解码
参数
参数 |
传入值类型 |
解释 |
str |
string |
需要转换的字符串 |
返回值
返回值类型 | 解释 |
string |
解码后的字符串,若解码失败则返回空字符串 |
miniz.uncompress(data,flags)
作用:快速解压,需要32KB的LuaVM内存
参数
参数 |
传入值类型 |
解释 |
data |
string |
待解压的数据,解压后的数据不能大于32KB |
flags |
flags |
解压参数,默认是miniz.PARSE_ZLIB_HEADER,即解析zlib头部 |
返回值
返回值类型 | 解释 |
string |
若解压成功,返回数据字符串,否则返回nil |
六、代码示例介绍
6.1 解压数据
先将压缩过的字符串进行base64解码,然后再解压:
压缩数据然后解压:
七、功能验证
成功解压:
八、总结
本例程介绍了如何压缩和解压数据。
九、常见问题
9.1 解压数据不能超过多少?
解压后的数据不能大于32k。