1.protobuf是什么和作用
Protocol buffers是一个灵活的、高效的、自动化的用于对结构化数据进行序列化的协议,与XML相比,Protocol buffers序列化后的码流更小、速度更快、操作更简单。
Protocol buffers的使用方法如下:
1)使用序列化的数据结构定义(即用.proto文件定义);
2)用protobuf生成工具生成不同语言,如protoc命令;
3)支持不同语言,如C、C++、JAVA、python、Golang、Ruby;
4)可以在结构文件中,定义不同的结构,从而适应不同的结构。
2.protobuf如何使用
protobuf的编译方法为protoc,需要安装protoc后才能使用。
在定义一定.proto文件后,可以对该文件进行生成。
如定义A.proto为:
syntax = "proto3";
package bayescom;
message Image {
int32 img_type = 1;
int32 img_w = 2;
int32 img_h = 3;
}
然后,执行如下命令protoc --proto_path=E:\workspace\proto --plugin=protoc-gen-go=E:\workspace\DepSource\bin\protoc-gen-go.exe --go_out=E:\workspace\proto E:\workspace\bayedsp\proto\A.proto,即可生成golang文件A.go
3.protobuf2和protobuf的区别
在上面例子中,注意syntax = "proto3"; 这几句话,如果不声明,则用protobuf为protobuf2。protobuf2和protobuf3的语法区别如下:
1)proto 文件第一行非空白非注释行,必须指定版本,syntax = "proto3";
2)字段规则移除了 “required”,并把 “optional” 改名为 “singular”
3)“repeated” 字段默认采用 packed 编码
4)语言增加 Go、Ruby、JavaNano 支持
5)移除了 default 选项
6)枚举类型的第一个字段必须为 0
7)移除了对分组的支持
8)移除了对扩展的支持,新增了 Any 类型
9)增加了 JSON 映射特性