protobuf

       ProtoBuf是何方神圣?她是序列化结构数据的方法,看官可能要问了,这序列化数据结构的方法有很多,这个protobuf来凑什么热闹,大家注意啊,我们的protobuf可是 和语言无关(支持java C++ python等)、平台无关、可以扩展、灵活高效,拥有自动化机制的序列化数据结构的function,那分分钟实现更小、更快、更易的三大方针五大纲领,她呀可以用在储存、通信等方面,兼容性好还可扩展,你说气人不?

比较

    说这么多废话,是不是还有可爱的程序员们没有领会精神?那咱们先从序列化开始,大概五百年前有一位老人家在等侄子的回信、跑题了,序列化,之前我一看他就头疼,怎么能长得如此狰狞,不过经过我不离不弃、坚持不懈的努力,他终于被我理解了,无疑就是将(结构)数据或者对象转换成能被储存和传输的格式,咱们一般用什么储存和传输,据我所知 二进制算一个,但是序列化仅仅如此倒不值得我呕心沥血,关键他还能保住序列化结果还能够被复原成原来(青春不老)的对象和数据。

    这个网络世界老是拿xml、json来说事,我就不是很明白,xml作为一种扩展标记语言、json源于js,怎么能……是、我们protobuf是小、快、简单,怎么了,萝卜白菜各有所长;正经点说,数据结构化主要是开发或者业务层、侧重可读性、不二意,数据序列化面向通信或储存、侧重效率和压缩。

          xml可衍生出标记和表达网络资源结构的html,还衍生出表达网络资源关系和语义的RDF/RDFS

          json则更为常见,这里就不说了

     具体来说怎么用protobuf呐?这个用起来好像很简单,网上也有很多资料,我这里简单举个栗子:

syntax = "proto3";

message SearchRequest {
  singular string query = 1;
  repeated int32 page_number = 2;
  repeated Result results = 1;
}
message Result {
  string url = 1;
  string title = 2;
}

 

类型

 

默认值:

  • 数值类型默认值为 0。
  • 布尔类型默认值为 false。
  • 字符串默认值为空字符串。
  • 字节类型默认值是空字节。
  • 枚举类型默认值是其定义中的第一个值,它必须为 0。
  • repeated字段的默认值为空(通常是相应编程语言的空列表)
  • 消息类型的默认值没有设置。它的具体值与使用的编程语言有关。

这个大神提醒我们注意:

  • 标量消息字段,消息被解析时,是否被设定为默认值不可知
  • 如果设置的值会导致某些不想发生的行为,则不定义该字段
  • 序列化时,标量消息字段的值设为默认值,则这个值不会被序列化
  • 枚举值她的第一个元素都应该是一个等于0的常量(兼容proto2)常量的值在32位整型值范围内
  • proto3的语法不容许直接使用proto2的枚举类型(被导入的proto2的消息使用,没有问题)

更新

注意

  • 在原来的message格式上修改,不改原有的字段
  • 可删除字段,新的message类型不要使用该字段的编号
  • int32,uint32,int64,uint64 和 bool 是兼容的,fixed32 与 sfixed32 兼容,fixed64 与 sfixed64 兼容,可类型转换 

消息类型

any:可以像嵌入类型一样使用消息,无需拥有其proto定义,一个any含任意字节序列化消息、一个url

oneof:如果你的message含许多可选字段,最多同时设置其中一个字段,使用oneof强制执行节省内存

         oneof字段将自动清除oneof其他成员,设置了多个字段只有最后一个字段有效

 

JSON映射

截图自https://blog.csdn.net/qq_22660775/article/details/89163881 上面的图也是 上面的文字也是 ——搬运工


 

https://www.jianshu.com/p/cae40f8faf1e 栗子不错

https://www.jianshu.com/p/a24c88c0526a 比较全

https://blog.csdn.net/qq_22660775/article/details/89163881

 

     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值