protobuf数据处理
一、PROTOBUF 数据处理简介
Protobuf(Protocol Buffers)是 google 开发的一种数据描述语言,它能够将结构化的数据序列化,并且可以将序列化的数据进行反序列化恢复原有的数据结构。一般用于数据存储以及通信协议方面。
它类似于 JSON,但更小更快,并且可以生成原生语言绑定。您只需定义一次数据结构,然后可以使用特定生成的源代码,轻松地在各种数据流中以及使用各种语言读写结构化数据。
Protobuf 解决了哪些问题?
Protobuf 提供了一种适合用于几兆字节大小的类型化、结构化数据包的序列化格式。该格式适用于瞬时网络流量和长期数据存储。Protobuf 可以扩展新的信息,而不会使现有数据无效,也不需要更新代码。
具体细节可以参考官方文档:https://protobuf.dev/overview/
二、演示功能概述
本示例将演示如何使用将 table 类型数据转为 Protobuf 格式,还有将 Protobuf 格式转为 table。
三、硬件准备
参考:硬件环境清单第二章节内容,准备以及组装好硬件环境。
四、软件环境
“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。
1. Luatools工具;
2. 内核固件文件(底层core固件文件):LuatOS-SoC_V2002_Air780EP;参考项目使用的内核固件;
3. luatos需要的脚本和资源文件
脚本和资源文件https://gitee.com/openLuat/LuatOS-Air780EP/tree/master/demo/protobuf
lib脚本文件:使用Luatools烧录时,勾选 添加默认lib 选项,使用默认lib脚本文件;
准备好软件环境之后,接下来查看如何烧录项目文件到Air780EP核心板,将本篇文章中演示使用的项目文件烧录到Air780EP核心板中。
5. 生成pb文件
去下载地址: https://github.com/protocolbuffers/protobuf/releases 下载
然后使用命令protoc.exe -o person.pb person.pbtxt
将pbtxt文件转换成pb文件。
六、代码示例介绍
6.1 使用 protobuf 编解码数据
6.1.1 demo 介绍
-- 加载 pb 文件, 这个是从pbtxt 转换得到的
-- 下载资源到模块时不需要下载pbtxt,需要下载person.pb文件
-- 转换命令: protoc.exe -o person.pb person.pbtxt
-- protoc.exe 下载地址: https://github.com/protocolbuffers/protobuf/releases
if io.exists(pb_file) then
protobuf.load(io.readFile(pb_file))
sys.publish("pb_file_exists")
else
log.info("protobuf","Failed to load file")
end
local tb = {
name = "wendal",
id = 123,
email = "abc@qq.com"
}
while 1 do
sys,waitUntil("pb_file_exists")
sys.wait(1000)
-- 用 protobuf 编码数据
local pbdata = protobuf.encode("Person", tb)
if pbdata then
-- 打印数据长度. 编码后的数据含不可见字符, toHex是方便显示
log.info("protobuf", "encode", #pbdata, (pbdata:toHex()))
end
-- 用 json 编码数据, 用于对比大小
local jdata = json.encode(tb)
if jdata then
log.info("json", #jdata, jdata)
end
-- 可见 protobuffs 比 json 节省很多空间
-- 后续是演示解码
local re = protobuf.decode("Person", pbdata)
if re then
-- 打印数据, 因为table不能直接显示, 这里转成json来显示
log.info("protobuf", "decode", json.encode(re))
end
end
七、功能验证
八、总结
本 demo 介绍了如何使用 PROTOBUF 编解码数据。
扩展
常见问题
给读者的话
本篇文章由
Linden
开发;本篇文章描述的内容,如果有错误、细节缺失、细节不清晰或者其他任何问题,总之就是无法解决您遇到的问题;
请登录合宙技术交流论坛,点击文档找错赢奖金-Air780EP-LuatOS-软件指南-常用功能实现-protobuf数据处理;
用截图标注+文字描述的方式跟帖回复,记录清楚您发现的问题;
我们会迅速核实并且修改文档;
同时也会为您累计找错积分,您还可能赢取月度找错奖金!