ProtoBuf初步学习

ProtoBuf
Google Protocol Buffer(简称Protobuf)是Goole公司内部开源的混合语言数据标准,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化(序列化),或者说序列化。可用于通讯协议、数据存储等领域的语言无关、平台无关、可拓展的序列化结构数据格式。

通过将结构化的数据进行串行化,从而实现数据存储/RPC数据交换功能
1、序列化:将数据结构或对象转化成二进制串的过程。
2、反序列化:将生成的二进制传转换成数据结构或者对象的过程。

选择序列化协议时需要考虑什么?
1、序列化之后流的大小(占用网络带宽)。
2、序列化和反序列化的性能(CPU资源占用)。
3、是否支持跨语言。

特点
优点:
性能方面:
体积小:序列化后数据大小可缩小约3倍。
序列化快:比XML和Json快2~50倍。
传输速度快:体积小,传输起来带宽和速度会有变化。
使用方面:
使用简单:Proto编译器自动进行序列化和反序列化。
维护成本低:多平台仅需要维护一套对象协议文件(.proto)
向后兼容性好:可拓展性好,不破坏原有数据格式,可直接对数据结构更 新。
加密性好:http传输内容抓包只能抓到字节。
使用范围方面:
跨平台
跨语言
可扩展性好
缺点:
功能方面:不适合用于对基于文本的标记文档(如HTML)建模,因为文本 不适合描述数据结构。
其他方面:以二进制数据流方式存储(不可读),需要通过.proto文件才能 了解数据结构。

语法规则:
指定字段类型:
标量类型:string、bool、int类型等。
合成类型:枚举等其他消息类型。
分配标识号:
在消息定义中,每个字段都有唯一的一个标识符,这个表示符是用来标识字段的,一旦开始使用就不能再改。
·注:【1,15】之内的标识号在编码时会占用一个字节,【16,2047】之内的标识号则会占用2个字节,所以应该为一些频繁出现的消息元素保留【1,15】之内的标识号。【19000,19999】的标识号不可使用,为协议预留的标识号。
指定地段规则:
所指定的消息字段必须是如下之一:
·required:不可增加或删除的则断,必须初始化。
·optional:可选字段,可删除,可以不初始化。
·repeated:可重复字段(对应C#里的List)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值