protobuf v3测试

    xiaoxiao2021-12-14  22

     谷歌最近发布了v3版本的protobuf,以前的protobuf被称之为v2,二者之间的区别其特点见我上一篇blog《protobuf一些注意事项》。

        个人以为v3要比v2好处就在于:简洁,且二者的新版本都共同支持了新的数据类型:map。相比v2,它去掉了required等选项,只保留了repeated选项,还添加了时间等比较常用的数据类型(当然暂时还没有实现)等等。唯一的缺点就是,v3还没有发布beta版,目前的版本是protobuf-3.0.0-alpha-1。

        为了测试v3对v2的兼容性,我写了一个程序,v2的协议内容如下:

    [plain]  view plain  copy   syntax = "proto2";      package proto3_proto;      message Message    {     enum Humour {       UNKNOWN = 0;       PUNS = 1;       SLAPSTICK = 2;       BILL_BAILEY = 3;     }        optional string name = 1;     optional Humour hilarity = 2;     optional uint32 height_in_cm = 3;     optional bytes data = 4;     optional int64 result_count = 7;     optional bool true_scotsman = 8;     optional float score = 9;        repeated uint64 key = 5 [packed = true];     // repeated uint64 key = 5;   }      message MessageArray   {      map<string, Message> msg_map = 1;   }        上面的协议内容基本上把protobuf各种数据类型都包括了,下面是对应的v3版本协议:

    [cpp]  view plain  copy   syntax = "proto3";      package proto3_proto;      message Message    {     enum Humour {       UNKNOWN = 0;       PUNS = 1;       SLAPSTICK = 2;       BILL_BAILEY = 3;     }        string name = 1;     Humour hilarity = 2;     uint32 height_in_cm = 3;     bytes data = 4;     int64 result_count = 7;     bool true_scotsman = 8;     float score = 9;        repeated uint64 key = 5[packed = true];   }      message MessageArray   {      map<string, Message> msg_map = 1;   }         v3的协议内容看着比v2清爽一些。 写了一个测试程序,其内容就不列出来了,我放在了 百度网盘 ,感兴趣的自己去下载。只要是v3没有改变v2的部分,二者编码后的内容是一致的。

       待v3的stable版本发布出来时候,它可能就开始支持时间等一些常用类型了,据说还可以把内容序列化为json格式,到时候再把更新本篇的内容。

    转载请注明原文地址: https://ju.6miu.com/read-965682.html

    最新回复(0)