天天看点

Protocol buffers学习

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 映射特性

继续阅读