指南-Luat二次开发教程指南-功能开发教程-protoBuffer

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描述文件
local pbFile = io.open("/lua/addressbook.pb","rb")
local pbBuf = pbFile:read("*a")
pbFile:close()
protobuf.register(pbBuf)
  • 使用protobuf.encode()序列化,序列化后的二进制数据流以string类型赋值给encodeStr
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
decodeTable = protobuf.decode("tutorial.Person", encodeStr)
decodeTable.profile.nick_name = "AHA"
decodeTable.profile.icon = "id:1"

常见问题

  1. 打印不了log问题,由于这个打印比较靠前,直接打印会丢失打印不出来,可以在mail.lua中次模块之前加一个延时处理rtos.sleep(3000)。

相关资料以及购买链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值