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)。