protoBuffer(数据格式)
# 简介
protobuffer是google开发的一种数据描述语言,它能够将结构化的数据序列化,并切可以将序列化的数据进行反序列化恢复原有的数据结构。一般用于数据存储以及通信协议方面。
# API说明
| API接口 | 描述 |
| --- | --- |
| protobuf.encode()| 序列化接口|
| protobuf.decode()| 反序列化接口|
# 实现流程
1. 创建addressbook.proto文件,定义数据结构。message 关键字后跟上消息名称Person ,之后我们在其中定义了 message 具有的字段,形式为:字段规则 类型 名称 = 字段编号。
2. proto编译为pb,具体编译方法见\demo\protoBuffer\proto编译为pb方法.txt文档说明
3. 注册proto描述文件
4. 调用protobuf.encode()接口做数据序列化
5. 调用protobuf.decode()接口做数据反序列化
# 示例
相关实例程序在脚本库的\demo\protoBuffer\下,这里主要是大概讲了一下主要流程,其它细节部分可以下载demo研究完整的代码。
- 注册proto描述文件
```lua
local pbFile = io.open("/lua/addressbook.pb","rb")
local pbBuf = pbFile:read("*a")
pbFile:close()
protobuf.register(pbBuf)
```
- 使用protobuf.encode()序列化,序列化后的二进制数据流以string类型赋值给encodeStr
```lua
local addressBook =
{
name = "Alice",
id = 12345,
phone =
{
{number = "1301234567"},
{number = "87654321", type = "WORK"},
{number = "13912345678", type = "MOBILE"},
},
email = "username@domain.com"
}
local encodeStr = protobuf.encode("tutorial.Person", addressBook)
```
- 使用protobuf.decode反序列化,反序列化后的数据以table类型赋值给decodeTable
```lua
decodeTable = protobuf.decode("tutorial.Person", encodeStr)
decodeTable.profile.nick_name = "AHA"
decodeTable.profile.icon = "id:1"
```
# 示例
[demo讲解](https://doc.openluat.com/wiki/21?wiki_page_id=2188"demo讲解")
# protoBuffer3
## 相关DEMO
以上为protoBuffer2的使用说明,如使用protoBuffer3请参考script_LuaTask\demo\protoBuffer3的DEMO
## 版本要求
大于等于V3105的LuatOS-Air版本,需去定制固件网页生成带PB功能的定制固件。定制固件地址:[http://erp.openluat.com/firm_customized](http://erp.openluat.com/firm_customized)
# 常见问题
1. 打印不了log问题,由于这个打印比较靠前,直接打印会丢失打印不出来,可以在mail.lua中次模块之前加一个延时处理rtos.sleep(3000)。