找回密码
 立即注册
查看: 225|回复: 0

Protobuf入门篇(win10 Python3)

[复制链接]
发表于 2023-2-15 11:59 | 显示全部楼层 |阅读模式
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文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 07:24 , Processed in 0.087847 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表