Protobuf3 系列三 更新Message类型
来源:互联网 发布:公司seo是什么职位 编辑:程序博客网 时间:2024/06/13 10:02
如果已经存在的Message类型不能满足要求,比如我们要在Message格式中需要新增一个额外字段,但是我们仍然希望用旧的代码处理新的Message格式。对于这种情况,Protobuf3的有着非常好的支持。更新Message,需要满足以下要求:
不要改变已经存在的数字标签
以下.proto中各个字段定义如下:
- ”string”: 定义字段类型
- “query”:定义字段名称
- “1”:表示数字标签;
string query = 1; // 1:是数字标签,数字标签一旦被使用不可修改
Message新增一个字段(Fields)后并重新生成新的代码。此时旧的代码对Message序列化的消息,可以被新的代码解析。你需要时刻记住新的值必须设置合适的默认值,这样新的代码可以和旧代码合理交互,相似的,新代码产生的消息,可以被旧代码解析
在删除Message中字段(Fields)时,需要注意对应的数字标签/字段名称不在后续更新中被再次使用。为了避免将来你误用数字标签/字段名称,可以将这些通过reserved避免被误用。
message Foo { reserved 2, 15, 9 to 11; // 预留的字段的数字标签 reserved "foo", "bar"; // 预留的字段的名称}
int32, uint32, int64, uint64, and bool是全兼容,这意味你把字段(Fields)的类型从其中一个类型改变这里面的其它任意一个,是可以向前或向后兼容。但是注意:如果int64被当作int32读取,等价于程序对其值截断为32位,可能出现数据丢失的。
sint32和sint64相互兼容。但是它们不兼容其它的integer类型
string和bytes相互兼容,只要统一使用UTF-8进行编码
flexed32兼容sfixed32,fixed64,sfixed64
enum兼容 int32, uint32, int64, and uint64。对于这个值在转化时,不同语言的客户端处理方式会有所不同
0 1
- Protobuf3 系列三 更新Message类型
- Protobuf3 系列一 第一个Java demo
- IBM Message Broker笔记系列(三)
- runtime系列4&5---Message Forwarding-消息转发&类型编码
- Protobuf3 系列二 定义复杂的proto文件
- JAVA类型转换系列文章三
- Message事实更新UI
- 消息类型(Message Types)
- Protobuf3 使用..
- Concurrence系列-Message使用
- Protobuf3 + Netty4: 在socket上传输多种类型的protobuf数据
- Protobuf3 + Netty4: 在socket上传输多种类型的protobuf数据
- Protobuf3 + Netty4: 在socket上传输多种类型的protobuf数据
- WCF安全系列(三) - netTCPBinding绑定之Message安全模式
- Flex快速入门系列之三:Parsley框架简单使用(IOC以及message机制)
- handler与message(三)
- MongoDB系列之三(副本集配置 持续更新)
- Message+多线程实现UI更新
- Effiective C++条款第二条 尽量以const,enum,inline,替换#define
- C程序设计语言第二版1.20
- 南阳oj 题目 90 整数划分
- 字典操作
- xamarin学习笔记A01下(ios环境的安装)
- Protobuf3 系列三 更新Message类型
- 虚拟机搭建CDH-第六讲-安装mysql第二种方法(通过rpm包安装)
- SSH--Hibernate传值为乱码 || 显示为乱码
- 避免把情绪带进工作
- idea 新增lombok插件
- MyEclipse关联源码
- C程序设计语言第二版1.21
- Climbing Stairs
- ubuntu 16.04 virtualbox could not insert 'vboxdrv': Required key not available 问题解决方法