总结:proto3比proto2支持的语言更多,语法更简洁。去掉了复杂的语法和特性,更强调约定而弱化语法。

1 在第一回非空白非注释行,写明语法:syntax = “proto3”;

2 字段规则移除了"required",所有非repeated的字段都默认为optional(可选的)
在proto2中required也是不推荐使用的。proto3直接从语法层面移除了required规则。

3 “repeated”字段默认采用packed编码
在proto2中,需要明确使用packed=true来为字段指定比较紧凑的packed编码方式。

4 语言增加go,ruby,JavaNano支持

5 移除了default选项
在proto2中,可以使用default选项为某一字段指定默认值。在proto3中,字段的默认值只能根据字段类型由系统决定。默认值全部是约定的,而不再提供默认值的语法。在字段被设置为默认值的时候,该字段不会被序列化,这样可以节省空间,提高效率。

6 枚举类型的第一个字段必须为0.

7 移除了对分组的支持。分组的功能完全可以使用消息嵌套方式实现。

8 旧代码在解析新增字段时,会把不认识的字段丢弃,再序列化后新增的字段就没了。
在proto2中,旧代码虽然会忽视不认识的新增字段,但并不会丢弃,再序列化的时候那些字段被原样保留。

9 移除了对扩展的支持,新增了Any类型。

10 新增了json映射特性。

proto3与proto2的区别相关推荐

  1. Protobuf 的 proto3 与 proto2 的区别

    Protobuf 的 proto3 与 proto2 的区别 转载自:https://solicomo.com/network-dev/protobuf-proto3-vs-proto2.html 这 ...

  2. proto3和proto2的区别

    转自:https://solicomo.com/network-dev/protobuf-proto3-vs-proto2.html proto3和proto2的区别 1.在第一行非空白非注释行,必须 ...

  3. 【Protocol Buffer】Protocol Buffer入门教程(三):proto3与proto2的区别

    总的来说,proto3 比 proto2 支持更多语言但 更简洁.去掉了一些复杂的语法和特性,更强调约定而弱化语法.如果是首次使用 Protobuf ,建议使用 proto3 . 在第一行非空白非注释 ...

  4. 【C++】C/C++系列教程汇总(更新中......)

    文章目录 01. C语言基础 02. C开发实战 03. 数据结构 04. C++语言基础 05. C++核心编程 06. C++开发实战 07. MFC 08. QT 09. Visual Stud ...

  5. 【C/C++】C/C++博客汇总

    00. 目录 文章目录 00. 目录 01. C语言控制台相关文章 02. Protocol Buffers相关文章 03. C语言高级用法 04. 嵌入式C语言高级用法 本博客不断更新,敬请关注- ...

  6. 正确使用 protobuf 的姿势

    Protobuf 总结 用途 Protobuf 是 google 出品的序列化框架,可跨平台.跨语言使用,扩展性良好.与 XML, JSON 等序列化框架相同,Protobuf 广泛的应用于数据存储, ...

  7. hbase协处理器编码实例

    Observer协处理器通常在一个特定的事件(诸如Get或Put)之前或之后发生,相当于RDBMS中的触发器.Endpoint协处理器则类似于RDBMS中的存储过程,因为它可以让你在RegionSer ...

  8. 一文读懂——Protobuf

    文章目录 简介 proto3 与 proto2 的区别 定义数据结构 字段类型 字段编号 字段规则 添加更多消息类型 添加注释 保留字段 默认值 定义枚举 编译.proto 文件 protoc编译 c ...

  9. proto2 proto3 变化

    总的来说,proto3 比 proto2 支持更多语言但 更简洁.去掉了一些复杂的语法和特性,更强调约定而弱化语法.如果是首次使用 Protobuf ,建议使用 proto3 . 1.在第一行非空白非 ...

  10. 深入理解 ProtoBuf 原理与工程实践(概述)

    ProtoBuf 作为一种跨平台.语言无关.可扩展的序列化结构数据的方法,已广泛应用于网络数据交换及存储.随着互联网的发展,系统的异构性会愈发突出,跨语言的需求会愈加明显,同时 gRPC 也大有取代R ...

最新文章

  1. 面试官:你能聊聊高并发下的接口幂等性如何实现吗?
  2. Android EditText.setError() - 会弹出一个popupwindow,效果很好
  3. SAP订单编排和流程增强概述
  4. anaconda+python3.7安装keras_win10(64)+python3.7+Anaconda3+tensorflow-cpu+Keras安装(亲测有效)...
  5. poj3264RMQ
  6. pandas 作图 统计_pandas数据作图方法
  7. spring源码:@Bean注解解析
  8. python实现批量将域名解析成ip
  9. 阿里云实践案例:使用ECS与OSS搭建个人云盘
  10. 代做matlab程序价格,代做data collection、Matlab设计代写、Matlab代做、代做Matlab编程代写R语言程序|代做R语言编程...
  11. IE浏览器下载中文文件,文件名乱码或变成下划线问题
  12. 12306网站车票爬取
  13. ansible之判断语句jinja2模板的使用 与roles角色的配置使用
  14. EVE-NG模拟器教程(四)——常用镜像导入和使用
  15. Oracle如何根据一个日期计算同比环比的日期
  16. 在这里,你终究会真正地失败
  17. linux上搭建集群环境
  18. 【flutter】打渠道包-多渠道脚本打包
  19. Complex复数类
  20. 使用apimocker工具辅助测试

热门文章

  1. 要突破技术瓶颈?80%的人忽略了这个因素
  2. 为研究自动驾驶卡车上路可行性,英政府出资810万英镑
  3. 经典代码d359f1d82912ef1b1cd784bd28829325
  4. 面向对象软件设计原则
  5. HDU 1754 I Hate It 线段树RMQ
  6. FusionCharts 分类以及各个属性参数列表
  7. 使用RabbitMQ做的一些工作及经验教训
  8. vs2008打开aspx文件时设计界面死机情况的解决
  9. 14.卷1(套接字联网API)---高级IO函数
  10. 39.Linux 内核