压缩解压缩
一、FastLZ 概述
1.1 FastLZ 是什么
FastLZ 是一个基于 ANSI C/C90 的小型、可移植的无损数据压缩库,实现了 LZ77 算法。它特别适合压缩文本、段落、原始像素数据序列或任何具有大量重复数据块的数据。FastLZ 的设计重点在于快速压缩和解压缩,以牺牲压缩比为代价。它由 ariya 编写,并在 MIT 许可下发布。
1.2 FastLZ 的使用
FastLZ 的使用非常简单,只包含两个文件:FastLZ.h 和 FastLZ.c,可以直接集成到任何 C/C++ 应用程序中。它支持多种体系结构,包括 Intel/AMD、ARM 和 MIPS 等,无论是 32 位还是 64 位,大端或小端都能良好工作。
在 LuatOS 中,用户只需调用“压缩/解压缩接口”即可实现数据的压缩与解压缩。
二、演示功能概述
本章节用一个示例演示 Air8101 中 FastLZ 的 压缩与解压缩 功能
三、准备硬件环境
“古人云:‘工欲善其事,必先利其器。’在深入介绍本功能示例之前,我们首先需要确保以下硬件环境的准备工作已经完成。”
参考:硬件环境清单 - luatos@air8101 - 合宙文档中心,准备以及组装好硬件环境。
四、软件环境
“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。
1. Luatools 工具;
2. 内核固件文件(底层 core 固件文件):LuatOS-SoC_V10001_Air8101.soc;参考项目使用的内核固件;
3. luatos 需要的脚本和资源文件
脚本和资源文件:https://gitee.com/openLuat/LuatOS-Air8101/tree/master/demo/fastlz
lib 脚本文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件;
准备好软件环境之后,接下来查看如何烧录项目文件到 Air8101 开发板 - luatos@air8101 - 合宙文档中心,将本篇文章中演示使用的项目文件烧录到 Air8101 开发板中。
五、FastLZ 软硬件资料
5.1 API 接口介绍
本教程使用 api 接口为:等待补充......
六、代码示例介绍
6.1 压缩与解压缩
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "FastLZ"
VERSION = "1.0.0"
sys = require("sys")
--添加硬狗防止程序卡死
if wdt then
wdt.init(9000)--初始化watchdog设置为9s
sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end
sys.taskInit(function()
sys.wait(1000)
-- 原始数据
local originStr = io.readFile("/luadb/fastlz.h") or "q309pura;dsnf;asdouyf89q03fonaewofhaeop;fhiqp02398ryhai;ofinap983fyua0weo;ifhj3p908fhaes;iofaw789prhfaeiwop;fhaesp98fadsjklfhasklfsjask;flhadsfk"
log.info("原始数据长度", #originStr)
-- 以压缩等级1 进行压缩
local L1 = fastlz.compress(originStr)
log.info("压缩等级1:压缩后的数据长度", #L1)
-- 解压
local dstr1 = fastlz.uncompress(L1)
log.info("压缩等级1:解压后的的数据长度", #dstr1)
-- 判断解压后的数据是否与原始数据相同
if originStr == dstr1 then
log.info("压缩等级1:解压后的数据与原始数据相同")
else
log.info("压缩等级1:解压后的数据与原始数据不同")
end
sys.wait(1000)
-- 以压缩等级2 进行压缩
local L2 = fastlz.compress(originStr, 2)
log.info("压缩等级2:压缩后的数据长度", #L2)
-- 解压
local dstr2 = fastlz.uncompress(L2)
log.info("压缩等级2:解压后的数据长度", #dstr2)
-- 判断解压后的数据是否与原始数据相同
if originStr == dstr2 then
log.info("压缩等级2:解压后的数据与原始数据相同")
else
log.info("压缩等级2:解压后的数据与原始数据不同")
end
end)
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!
七、总结
本教程旨在通过合宙开发板展示 FastLZ 压缩与解压缩的实现方法。