protobuf 的理解

     protobuf 是一种轻便高效的结构化数据储存格式。支持跨平台。优点是传输的时候,数据可以压缩很小。传输效率高。

protobuf 利用protoc编译 .proto 文件生成 xxx.pb2.py。在XXX.pb2.py 中序列化【编码】XXX.proto 文件。

  • 定义message 结构

protobuf 将一种结构称为message 类型

 

  • 1,2,3是field 对应的数字id,id再1到15之间的编码只需要占一个字节,包括filed数据类型和feild对应的数字id. 在16到2047 之间编码需要占用两个字节,所以最常用的数据对应的id 应该尽量小一些。
  • field 最前面的required【只有一个】,optional【0个或1个】,repeated是filed的规则【0个或任意个】。
  • 保留filed 和filed number。每个filed对应唯一的数字id,但是如果该结构在之后的版本中某个filed 被删除了,为了保持向前的兼容性,需要将一些id 或者名称设置为保留的,即不能被用来定义新的field.

 

  • message 扩展

在另一个文件中,import 这个proto之后,可以对Person这个message进行扩展。

extend Person { optional int32 bar = 126; }

 

  • 定义message 结构

protobuf 的反射机制

https://www.cnblogs.com/swey/p/4733638.html

protobuf 通过proto文件生成相应的message和service. protobuf也通过proto文件提供反射机制。程序在运行时可以通过proto获取任意message 和任意service的属性和方法。也可以运行时调用message的属性和方法。

protobuf 的序列化和反序列化【包含简单应用的例子】

https://www.cnblogs.com/pheobe/p/5761130.html

获取message和service的属性和方法:

protobuf 通过Descriptor 获取任意message 或service的属性和方法,Descriptor主要包括以下类型:

FileDescriptor   获取proto文件中的Descriptor和ServiceDescriptor

Descriptor      获取类message属性和方法,包括FieldDescriptor 和 EnumDescriptor等

FieldDescriptor   获取message中各个字段的类型、标签、名称等

EnumDescriptor   获取Enum中的各个字段名称、值等

ServiceDescriptor 获取service中的MethodDescriptor

MethodDescriptor 获取各个rpc中的request、response、名称等

 

PS:暂且总结到这边,有什么再添加。附上几个有用的链接:

https://www.cnblogs.com/zchajax/p/5783258.html protobuf 开发者指南

https://www.jianshu.com/p/419efe983cb2

protobuf 的API:

https://developers.google.com/protocol-buffers/docs/reference/python/google.protobuf.message.Message-class

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xunaizhan123ok

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值