八.Protobuf3更新消息类型(添加新的字段)
Protobuf3 更新消息类型
如果现有的消息类型不满足你的所有需求——例如,你希望消息格式有一个额外的字段——但是你仍然希望使用用旧格式创建的代码,别担心!在不破坏任何现有代码的情况下更新消息类型非常简单。请记住以下规则:
不要更改任何现有字段的字段编号。
如果添加新字段,任何使用“旧”消息格式由代码序列化的消息仍然可以被新生成的代码解析。您应该记住这些元素的默认值,以便新代码可以与旧代码生成的消息能够正确交互。同样,新代码创建的消息可以被旧代码解析:旧二进制文件在解析时忽略新字段。
未知字段是格式良好的协议缓冲区序列化数据,用于表示解析器无法识别的字段。例如,当旧二进制解析新二进制发送的带有新字段的数据时,这些新字段将成为旧二进制中未知的字段。
最初,proto3消息在解析过程中总是丢弃未知字段,但是在3.5版中,我们重新引入了未知字段的保留以匹配proto2行为。在3.5及更高版本中,未知字段会在解析期间保留,并包含在序列化输出中。
只要更新的消息类型中不再使用字段号,就可以删除字段。您可能希望重命名该字段,也许添加前缀 "OBSOLETE_",或者保留字段号,以便将来你.proto不会意外地被其他用户重复使用。
int32, uint32, int64, uint64和bool都是兼容的——这意味着您可以将字段从这些类型中的一种更改为另一种类型,而不破坏向前或向后兼容性。如果从不适合相应类型中的字段中解析出一个数字,你将会得到与用c++将该数字转换为该类型相同的效果(例如,如果int64数字被解析为int32,它将被截断为32位)。
sint32 和sint64 彼此兼容,但与其他整数类型不兼容。只要字节是有效的UTF - 8,字符串和字节是兼容的。
如果字节包含消息的编码版本,则嵌入消息与字节兼容。
fixed32与sfixed32兼容, fixed64与sfixed64兼容。
enum与int32、uint32、int64和uint64在电线格式条款兼容(请注意,如果这些值不匹配,它们将被截断)。然而,请注意,当消息被反序列化时,客户端代码可能会以不同的方式对待它们:例如,无法识别的proto3枚举类型将保留在消息中,但是当消息被反序列化时,这是如何表示的取决于语言,int字段总是保留其值。
将单个值更改为新值的成员是安全的,并且是二进制兼容的。如果您确定没有代码一次设置多个字段,将多个字段移动到新的字段可能是安全的,将任何字段移动到现有字段中是不安全的。
八.Protobuf3更新消息类型(添加新的字段)的更多相关文章
- gRPC in ASP.NET Core 3.x -- Protocol Buffer(3)更新消息类型
当你第一次定义Protocol Buffer的消息的时候,你肯定会给消息设定一套规则需求.但是随着时间的推进,你的业务可能会发生了变化,与此同时,你的Protocol Buffer消息类型的需求也会随 ...
- Language Guide (proto3) | proto3 语言指南(七)更新消息类型
Updating A Message Type - 更新消息类型 如果现有的消息类型不再满足您的所有需要(例如,您希望消息格式有一个额外的字段),但是您仍然希望使用用旧格式创建的代码,不要担心!在不破 ...
- ASP.NET Core 中文文档 第二章 指南(4.8)添加新的字段
原文 Adding a New Field 作者 Rick Anderson 翻译 谢炀(Kiler) 校对 许登洋(Seay).高嵩(Jack) 在这个章节你将使用 Entity Framework ...
- EF中如何为表添加新的字段和映射
首先先了解一下ef生成的模型edmx的代码,传送门:http://www.cnblogs.com/yushengbo/p/4807715.html 一.添加新的字段 例子就用我现在项目的这个吧,首先在 ...
- SQLite添加新的字段
通过alter添加新的字段SQL语句 "ALTER TABLE 'DiHKChatMessage' ADD 'phoneNum' varchar"; 但是如果这个字段已经存在的话, ...
- mssql sqlserver 给已存在表添加新的字段及字段备注的方法
转自:http://www.maomao365.com/?p=8102 摘要: 下文讲述向已存在表上添加新字段及字段备注的方法,如下所示: 实验环境:sql server 2008 R2 1. 添加新 ...
- 如何使用django操作数据库,向原有表中添加新的字段信息并建立一个多对多的关系?
(注:本人用的pycharm开发工具) 1.在你要添加新字段的app的 models.py 文件中添加需要新增的字段(book表新增authors字段并和author建立多对多关系,author表新增 ...
- js 给json添加新的字段,或者添加一组数据,在JS数组指定位置删除、插入、替换元素
JS定义了一个json数据var test={name:"name",age:"12"};需要给test再添加一个字段,需要什么办法,可以让test的值为{na ...
- Qt+QGIS二次开发:向shp矢量图层中添加新的字段
添加一个新的字段到shp文件中,并且从Excel里导入数据到该字段.原shp文件里的字段ID应该与Excel里的字段ID一一对应才能正确的导入.下图分别是shp的字段和Excel的字段 将class字 ...
随机推荐
- 使用pyinstaller将python打包成exe文件
步骤: 1)win+R 输入cmd打开dos窗口 2)先安装pyinstaller: pip install pyinstaller 3)然后使用cd命令进入项目文件的路径下: 4)再使用命令 ...
- 史上最详细bitbucket入门手册,手把手操作指南
老大要我去调研一下有什么好用的免费软件版本管理工具,有利于小团队开发的.我第一个想到的就是git,经常在git下东西,听说它的代码仓库好用,于是就注册了一个github的账号,创建仓库的时候才发现只能 ...
- 10 Spring框架--基于注解和xml的配置的应用案例
1.项目结构 2.基于xml配置的项目 <1>账户的业务层接口及其实现类 IAccountService.java package lucky.service; import lucky. ...
- handy网络库源码阅读
简洁易用的C++11网络库,From:https://github.com/yedf/handy 在整理过去的资料过程中,发现过去有关注过这一个网络库,简单看了一下属于轻量级的实现,因此本文将对该库进 ...
- Python各个岗位的开发流程
根据张大美女提供资料微修改,在这谢谢张大美女! 1.python软件开发工程师 1.1 项目启动会 说明项目目标.阶段划分.组织结构.管理流程等关键事项. 1.2 需求调研 由用户提出,描述产品的功 ...
- MVC与MTV模型
MVC与MTV模型 MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起,模型负责业务 ...
- 【IDEA使用技巧】(3) —— IntelliJ IDEA Maven配置
1.IntelliJ IDEA Maven配置 1.1. Maven介绍与下载 Maven是一个项目管理工具,使用它能对Java项目中的jar包进行管理与项目构建,很好地解决了传统项目使用导包的方式管 ...
- JavaScript Web API 全选反选案例
全选反选 全选和反选功能,在开发中可以说是应用得非常多的,以下通过案例分解,学习如何使用JS实现全选反选功能. 该功能可分为如下三大步骤: 1.全选 1.1 获取父checkbox,注册点击事件 1. ...
- 一步一步手写GIS开源项目-(1)500行代码实现基础GIS展示功能
1.开篇 大学毕业工作已经两年了,上学那会就很想研读一份开源GIS的源码,苦于自己知识和理解有限,而市面上也没有什么由浅入深讲解开源gis原理的书籍,大多都是开源项目简介以及项目的简单应用.对于初级程 ...
- c# 异步( Async ) 不是多线程
c# 异步( Async ) 不是多线程 误解 async 在调试 xxxxAsync() 方法的时候,常常会看到调试器界面中会多出一些线程,直觉上误认为 Async 冠名的函数是多线程. 对于 ...