Protocol buffers学习

本文深入解析Protobuf3的特点与使用方法,对比Protobuf2,详细介绍其在序列化效率、语言支持及语法上的改进。从.proto文件定义到protoc命令生成,涵盖C、C++、Java、Python、Golang等多语言应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值