Protobuf学习笔记

Protobuf全称Protocol Buffers,是一个Google开发的一套用于数据存储,网络通信时用于协议编解码的工具库。它与XML和Json数据类似,但具有更高的速度和效率。

先介绍一下Protobuf的数据格式,required,optional和repeated,以下面这段代码为例:

//定义Protobuf数据格式
message Person{
    required string name = 1;        //必须项
    optional string gender = 2;      //可选项
    repeated string skills = 3;      //可重复项,可以理解为数组
}

在上述代码中,数字【1-3】是Protobuf数据的标识,每个字段拥有唯一的标识符,根据标识符可以区分不同的字段。在一个标准的Protobuf数据中,一般至少有一个required的数据,且为使用数据前必须设置的值,即初始化时必须为带有required属性的变量赋值,optional和repeated可以不必赋值,但optional使用时只能赋一个值,而repeated可以添加多项。

下面以一个实际的项目来理解Potobuf数据从定义到使用的过程,以python环境下为例。

假设目录结构如下:

demo
|————demo.py
|————person.proto

其中,person.proto文件中为第一段代码中的内容。通过protoc可以将proto文件编译为python调用的文件。

protoc -I=./ --python_out=./ ./person.proto
//-I参数为需要编译的proto文件所在的目录
//--python_out为编译输出文件保存的目录
//最后一个参数为编译的文件的目录文件名

编译结束后,会在设定目录下生成一个名为person.py的文件,目录结构如下:

demo
|————demo.py
|————person_pb2.py
|————person.proto

通过如下代码,可以调用person.py文件。

from person_pb2 import Person

def main():
    demo = Person()
    demo.name = 'demo'
    demo.gender = 'male'
    demo.skills.append('walk')
    demo.skills.append('run')
    print demo

    # 写demo
    with open('demo.io', 'wb+') as f:
        f.write(demo.SerializeToString()) 
    
    # 读demo
    with open('demo.io', 'rb') as f:
        demo1 = Person()
        demo1.ParseFromString(f.read())
        print demo1

if __name__ == "__main__":
    main()

简而言之,protobuf可以理解为简化版的类的定义方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值