15 miniz压缩解压缩
作者:沈园园
一、MINIZ 解压工具简介
miniz是一个单一文件的小型压缩库,它是zlib的一个替代品,专门为需要轻量级压缩解决方案的项目设计,它被设计成可以轻松地集成到项目中,并且具有最小的依赖性。
miniz的主要特点包括:
- 支持zlib兼容的压缩和解压缩。
- 单个源文件实现,易于集成。
- 小的内存占用,适合资源受限的环境。
- 支持流式压缩和解压缩。 注意:如果数据本身只有几十个字节,压缩后可能更大,而非更小。
二、演示功能概述
演示miniz的压缩与解压缩的使用方法。
三、准备硬件环境

1、Air780EHV核心板一块
2、TYPE-C USB数据线一根
3、Air780EHV核心板和数据线的硬件接线方式为
- Air780EHV核心板通过TYPE-C USB口连接TYPE-C USB 数据线,数据线的另外一端连接电脑的USB口;
- 核心板正面的 ON/OFF 拨动开关 拨到ON一端;
四、准备软件环境
4.1 软件环境
在开始实践本示例之前,先筹备一下软件环境:
1、烧录工具:Luatools 下载调试工具
2、内核固件:本demo开发测试时使用的固件为LuatOS-SoC_V2032_Air780EHV,本demo对固件版本没有什么特殊要求,所以你如果要测试本demo时,可以直接使用最新版本的内核固件;如果发现最新版本的内核固件测试有问题,可以使用我们开发本demo时使用的内核固件版本来对比测试;
3、脚本文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air780EHM_Air780EHV_Air780EGH/demo/miniz
4、lib脚本文件:使用Luatools烧录时,勾选 添加默认lib 选项,使用默认lib脚本文件
准备好软件环境之后,接下来查看如何烧录项目文件到Air780EHV核心板,将本篇文章中演示使用的项目文件烧录到780EHV核心板中。
4.2 API 介绍
miniz 库:https://docs.openluat.com/osapi/core/miniz/
五、程序结构
miniz/
│── main.lua
│── miniz_app.lua
│── readme.md
5.1 文件说明
main.lua:主程序入口文件。miniz_app.lua:miniz的压缩与解压缩的使用方法。
六、代码详解
6.1 main.lua
主程序文件 main.lua 是整个项目的入口点。它负责初始化系统环境。
6.2 miniz_app.lua
miniz的压缩与解压缩的使用方法。
6.2.1 压缩与解压
local function miniz_task_func()
-- 压缩过的字符串, 为了方便演示, 这里用了base64编码
-- miniz能解压标准zlib数据流
-- 将字符串进行base64解码
local b64str = "eAEFQIGNwyAMXOUm+E2+OzjhCCiOjYyhyvbVR7K7IR0l+iau8G82eIW5jXVoPzF5pse/B8FaPXLiWTNxEMsKI+WmIR0l+iayEY2i2V4UbqqPh5bwimyEuY11aD8xeaYHxAquvom6VDFUXqQjG1Fek6efCFfCK0b0LUnQMjiCxhUT05GNL75dFUWCSMcjN3EE5c4Wvq42/36R41fa"
local str = b64str:fromBase64()
-- 快速解压
local dstr = miniz.uncompress(str)
-- 压缩过的数据长度 156
-- 解压后的数据长度,即原始数据的长度 235
log.info("miniz", "压缩过的数据长度: ", #str, "解压后的数据长度:", #dstr)
-- 演示压缩解压
local ostr = "abcd1234567890efghijklmnopqrstuvwxyzabcd1234567890efghijklmnopqrstuvwxyzabcd1234567890efghijklmnopqrstuvwxyz"
log.info("压缩前的字符串:", #ostr, ostr)
-- 压缩字符串
local zstr = miniz.compress(ostr)
log.info("压缩后的字符串:",#zstr, zstr:toHex())
-- 解压字符串
local lstr = miniz.uncompress(zstr)
log.info("解压后的字符串:", #lstr, lstr)
-- 演示从文件读取2K数据压缩
local ostr = io.readFile("/luadb/test.txt")
local zstr = miniz.compress(ostr)
if zstr then
log.info("miniz", "压缩前的数据长度: ", #ostr, "压缩后的数据长度: ", #zstr)
end
end
--创建一个task,并且运行task的主函数miniz_task_func
sys.taskInit(miniz_task_func)
七、运行结果展示
出现类似于下面的日志,就表示运行成功:
[2025-10-28 11:39:11.816][000000000.379] I/user.miniz 压缩过的数据长度: 156 解压后的数据长度: 235
[2025-10-28 11:39:11.821][000000000.380] I/user.压缩前的字符串: 108 abcd1234567890efghijklmnopqrstuvwxyzabcd1234567890efghijklmnopqrstuvwxyzabcd1234567890efghijklmnopqrstuvwxyz
[2025-10-28 11:39:11.826][000000000.383] I/user.压缩后的字符串: 92 780105C0040D80B04A383CCEDDDD9F9E4184C97E9CD7FDBC1FD828E3422A6DACF321A65C6AEB632E8830D98FF3BA9FF7031B655C48A58D753EC4944B6D7DCC051126FB715EF7F37E60A38C0BA9B4B1CE879872A9AD8FB97E17A42785 184
[2025-10-28 11:39:11.832][000000000.383] I/user.解压后的字符串: 108 abcd1234567890efghijklmnopqrstuvwxyzabcd1234567890efghijklmnopqrstuvwxyzabcd1234567890efghijklmnopqrstuvwxyz
[2025-10-28 11:39:11.836][000000000.389] I/user.miniz 压缩前的数据长度: 2048 压缩后的数据长度: 1350
八、总结
通过本文学习,你可以学习到miniz的压缩与解压缩的使用方法。