Protobuf 简单使用 电脑版发表于:2020/5/11 20:27 创建.proto文件,定义数据结构 ``` message MyExample{ optional string stringVal =1; optional bytes bytesVal =2; message EmbeddedMessage{ int32 int32Val = 1; string stringVal = 2; } optional EmbededMessage embeddedExample = 3; repeated int32 repeatedInt32Val = 4; repeated string repeatedStringVal = 5; } ``` 我们在上例中定义了一个名为 MyExample 的 消息,语法很简单,message 关键字后跟上消息名称: ``` message jjj{ } ``` 之后我们在其中定义了message具有的字段,形式为: ``` message jjj { // 字段规则:required -> 字段只能也必须出现 1 次 // 字段规则:optional -> 字段可出现 0 次或多次 // 字段规则:repeated -> 字段可出现任意多次(包括 0) // 类型:int32、int64、sint32、sint64、string、32-bit .... // 字段编号:0 ~ 536870911(除去 19000 到 19999 之间的数字) 字段规则 类型 名称 = 字段编号; } ``` 在上例中,我们定义了: - 类型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) protoc编译.proto文件生成读写接口 我们在.proto文件中定义了数据结构,这些数据结构是面向开发者和业务程序的,并不面向存储和传输。 当需要把这些数据进行存储或传输时,就需要将这些结构数据进行序列化、反序列化以及读写。那么如何实现呢?不用担心,ProtoBuf 将会为我们提供相应的接口代码。如何提供?答案就是通过 protoc 这个编译器。