Ubuntu下使用Protocol Buffer(简写:protobuf) (1.简介)

1.1简介

     protobuf也叫protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:Java、c#、c++、Go Python,每一种实现都包含了相应语言的编译器以及库文件。

1.1.1..proto文件(分为proto2 和proto3),这里以proto3为例,对应的protoc指令的版本也要是3.0.0以上。

Ubuntu下使用Protocol Buffer(简写:protobuf) (1.简介)

      从上图看消息元素所带的数字,其中数字1~15是占极少byte,最好要把常用的消息元素保留数字1到15,而数字16~2047占2 byte。数字范围在1~(229-1)(536870911),其中19000 ~19999已经被protobuf用作他用,用了protoc会警报。 .proto文件中的注释规范: //注释内容 或 /*注释内容*/

1.1.2三个限定修饰符

required :就是必须的意思,数据发送方和接收方都必须处理这个字段。必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前没有设置required字段或者无法识别required字段都会引发编解码异常,导致消息被丢弃。

optional:可选的意思。处理这个字段,就是protobuf处理的时候另外加了一个bool的变量,用来标记这个optional字段是否有值,发送方在发送的时候,如果这个字段有值,那么就给bool变量标记为true,否则就标记为false,接收方在收到这个字段的同时,也会收到发送方同时发送的bool变量,拿着bool变量就知道这个字段是否有值了,这就是option的意思。

repeated:表示该字段可以包含0~N个元素。其特性和optional一样,但是每一次可以包含多个值。可以看作是在传递一个数组的值。

1.1.3enum数据

可以在message类中继续定义enum类型的数据,enum类型包括的范围在32bit整数内,在protoc编译后的.cc文件中也会产生相应的enum类型的数据。

Ubuntu下使用Protocol Buffer(简写:protobuf) (1.简介)

1.1.4message类

可以定义多个message类

Ubuntu下使用Protocol Buffer(简写:protobuf) (1.简介)

要是自己定义message类已经出现在other_proto.proto文件中,可以用import引用过来,在mine.proto顶部添加:import “myproject/other_proto.proto”;

1.1.5Nested 类型(嵌套类型)

*可以在一个message SearchResponse内部再定义、使用其他的message Result类型

Ubuntu下使用Protocol Buffer(简写:protobuf) (1.简介)

 

*如果想用父类信息,可以用 . 操作

 

message SomeotherMessage{

SearchResponse.Result result =1

}

*也可以多重嵌套定义

Ubuntu下使用Protocol Buffer(简写:protobuf) (1.简介)

 

1.1.3数据类型对应关系

 

Ubuntu下使用Protocol Buffer(简写:protobuf) (1.简介)

 

Ubuntu下使用Protocol Buffer(简写:protobuf) (1.简介)