protobuf v3测试

本文对比了Protobuf v2与v3的主要区别,重点介绍了v3版本的改进之处,如简化语法、新增数据类型等,并通过示例展示了v3对v2的兼容性。

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

 谷歌最近发布了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
  在CODE上查看代码片 派生到我的代码片
  1. syntax = "proto2";  
  2.   
  3. package proto3_proto;  
  4.   
  5. message Message   
  6. {  
  7.   enum Humour {  
  8.     UNKNOWN = 0;  
  9.     PUNS = 1;  
  10.     SLAPSTICK = 2;  
  11.     BILL_BAILEY = 3;  
  12.   }  
  13.   
  14.   optional string name = 1;  
  15.   optional Humour hilarity = 2;  
  16.   optional uint32 height_in_cm = 3;  
  17.   optional bytes data = 4;  
  18.   optional int64 result_count = 7;  
  19.   optional bool true_scotsman = 8;  
  20.   optional float score = 9;  
  21.   
  22.   repeated uint64 key = 5 [packed = true];  
  23.   // repeated uint64 key = 5;  
  24. }  
  25.   
  26. message MessageArray  
  27. {  
  28.    map<string, Message> msg_map = 1;  
  29. }  
     上面的协议内容基本上把protobuf各种数据类型都包括了,下面是对应的v3版本协议:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. syntax = "proto3";  
  2.   
  3. package proto3_proto;  
  4.   
  5. message Message   
  6. {  
  7.   enum Humour {  
  8.     UNKNOWN = 0;  
  9.     PUNS = 1;  
  10.     SLAPSTICK = 2;  
  11.     BILL_BAILEY = 3;  
  12.   }  
  13.   
  14.   string name = 1;  
  15.   Humour hilarity = 2;  
  16.   uint32 height_in_cm = 3;  
  17.   bytes data = 4;  
  18.   int64 result_count = 7;  
  19.   bool true_scotsman = 8;  
  20.   float score = 9;  
  21.   
  22.   repeated uint64 key = 5[packed = true];  
  23. }  
  24.   
  25. message MessageArray  
  26. {  
  27.    map<string, Message> msg_map = 1;  
  28. }    

    v3的协议内容看着比v2清爽一些。 写了一个测试程序,其内容就不列出来了,我放在了 百度网盘 ,感兴趣的自己去下载。只要是v3没有改变v2的部分,二者编码后的内容是一致的。

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

您可以通过以下步骤下载protobuf: 1. 首先,您需要访问protobuf的官方网站(https://developers.google.com/protocol-buffers)。 2. 在官方网站上,您可以找到protobuf的最新版本。点击下载链接,您将获得一个.tar.gz文件。 3. 引用\[1\]中提供了一个示例命令来解压和安装protobuf。您可以使用类似的命令来完成安装。首先,使用tar命令解压缩.tar.gz文件,然后进入解压后的目录。接下来,运行./configure命令进行配置,指定安装路径。然后,使用make命令编译protobuf,并使用make check命令运行测试。最后,使用sudo make install命令将protobuf安装到系统中。 4. 安装完成后,您可以在GOPATH目录下的src目录中找到protobuf的编译器插件protoc-gen-go。这个插件可以通过执行protoc命令自动调用。您可以使用protoc命令将.proto文件编译成对应语言的文件,以便进行使用。引用\[2\]提供了关于如何使用protobuf的更多信息。 5. 引用\[3\]中提到protobuf是一种适合高性能、对响应速度有要求的数据传输场景的数据格式。它具有序列化后体积小、支持跨平台多语言、消息格式升级和兼容性好、序列化反序列化速度快等优势。 希望这些信息对您有帮助! #### 引用[.reference_title] - *1* [ProtoBuf下载和安装(Linux)](https://blog.youkuaiyun.com/liudi_ly/article/details/103275935)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [protobuf 下载 使用](https://blog.youkuaiyun.com/php12345679/article/details/124951583)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值