c0d3n4m 发表于 2023-2-15 11:59

Protobuf入门篇(win10 Python3)

Protobuf简介:Protocol buffers(协议缓冲区)是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。Google出品的一种轻量&高效的结构化数据存储格式,性能比Json、XML真的强太多!
Protobuf的功能:通过将结构化的数据进行串行化(序列化)从而实现数据存储/RPC数据交换的功能。
Protobuf的简单使用:我们需要先编写一个.proto的文件,这个文件用来定义数据格式,和json文件一样。下一步,我们需要proto的编译器将这个文件编译成py文件,或者h/cpp文件。最后我们在通过proto提供的python的api接口访问生成的py文件。
具体步骤:
1.安装Protobuf编译器,下载链接如下:


把下载的安装包,解压到自己的安装路径之后,添加环境变量,就可以使用了。


测试安装的protoc是否成功:
新打开一个命令行:输入protoc --version,如果输出版本号,表明安装成功。


2.创建.proto文件,定义数据结构(message关键字后跟上消息名称)
定义的message具有字段,形式为:
message xxx {
// 字段规则:required -> 字段只能也必须出现 1 次
// 字段规则:optional -> 字段可出现 0 次或1次
// 字段规则:repeated -> 字段可出现任意多次(包括 0)
// 类型:int32、int64、sint32、sint64、string、32-bit ....
// 字段编号:0 ~ 536870911(除去 19000 到 19999 之间的数字)
字段规则 类型 名称 = 字段编号;
}
// 在 xxx.proto 文件中定义 Example message
message Example {
    optional string stringVal = 1;
    optional bytes bytesVal = 2;
    message EmbeddedMessage {
      int32 int32Val = 1;
      string stringVal = 2;
    }
    optional EmbeddedMessage embeddedExample1 = 3;
    repeated int32 repeatedInt32Val = 4;
    repeated string repeatedStringVal = 5;
}
在上例中,我们定义了:
类型 string,名为 stringVal 的 optional 可选字段,字段编号为 1,此字段可出现 0 或 1 次

[*]类型 bytes,名为 bytesVal 的 optional 可选字段,字段编号为 2,此字段可出现 0 或 1 次
[*]类型 EmbeddedMessage(自定义的内嵌 message 类型),名为 embeddedExample1 的 optional 可选字段,字段编号为 3,此字段可出现 0 或 1 次
[*]类型 int32,名为 repeatedInt32Val 的 repeated 可重复字段,字段编号为 4,此字段可出现 任意多次(包括 0)
[*]类型 string,名为 repeatedStringVal 的 repeated 可重复字段,字段编号为 5,此字段可出现 任意多次(包括 0)
3.编译.proto文件生成相应的.py文件
4.引用.py文件
页: [1]
查看完整版本: Protobuf入门篇(win10 Python3)