《protobuf》基础语法3

文章目录

  • 默认值
  • 更新规则
  • 保留字段
  • 未知字段

默认值

在反序列化时,若被反序列化的二进制序列中不包含某个字段,则在反序列化时,就会设置对应默认值。不同的类型默认值不同:

类型默认值
字符串“”
布尔型false
数值类型0
枚举型0
设置了repeated的字段空列表
  • ps:对于消息字段oneof字段any字段,有 has_ 方法来检测字段值是否被设置。

更新规则

  • 禁止修改任何已有字段的字段编号
  • 若是移除老字段,要保证不能再使用老字段使用过的编号。(正确做法是将其设为保留字段reserved)
  • oneof
    1.将一个单独的值更改为新oneof类型成员之一是安全和二进制兼容的
    2.将任何字段移入已存在的oneof类型是不安全的。

保留字段

message Reserved
{reversed 100;reversed 10 to 99;reversed "hello", "field";// 以上做法都可行// 注意:不要在⼀⾏ reserved 声明中同时声明字段编号和名称。reserved 102, "field5"// 设置保留项之后,下⾯代码会告警int32 field1 = 100; //告警:Field 'field1' uses reserved number 100int32 field2 = 11; //告警:Field 'field2' uses reserved number 101int32 hello = 102; //告警:Field name 'hello' is reservedint32 field = 103; //告警:Field name 'field' is reserved
}

这里给出更新例子:

有两个文件夹,client,server
在这里插入图片描述
server端写数据,client端读数据
在这里插入图片描述
下面对.proto文件中的已存在字段进行修改
在这里插入图片描述
然后把serve.cc相应增加代码修改一下

在这里插入图片描述
之后再编译链接,添加数据

在这里插入图片描述

注意看,查询到的年龄数据是180,显然protobuf里的字段是根据编号来控制的那么正确的做法是保留字段编号(reserved),以确保该编号将不能被重复使⽤

所以这就是为什么要引入reversed保留字的原因。

正确做法:
在这里插入图片描述
在这里插入图片描述
看到ww的年龄为0,这里就是本文开篇讲的类型默认值,那身高的数据跑哪里去了?

它在未知字段

未知字段

那么这里有个问题,什么是未知字段?

下面是类图
在这里插入图片描述

  1. 我们定义好的Message类People,调用People里的静态函数 GetReflection(),获得读写字段reflection
  2. 调用reflection中GetUnknownFields()函数,获得Message的People未知字段集合set
  3. 遍历set,获得未知字段unknow_field
  4. 最后根据未知字段的类型调用对应函数来打印对应值。
    在这里插入图片描述
  inline int number() const;  // 返回未知字段的编号inline Type type() const;  // 返回未知字段的类型

下面对应代码
在这里插入图片描述

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/150305.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于风驱动优化的BP神经网络(分类应用) - 附代码

基于风驱动优化的BP神经网络(分类应用) - 附代码 文章目录 基于风驱动优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.风驱动优化BP神经网络3.1 BP神经网络参数设置3.2 风驱动算法应用 4.测试结果&#x…

Zookeeper经典应用场景实战(一)

文章目录 1、Zookeeper Java客户端实战1.1、 Zookeeper 原生Java客户端使用1.2、 Curator开源客户端使用 2、 Zookeeper在分布式命名服务中的实战2.1、 分布式API目录2.2、 分布式节点的命名2.3、 分布式的ID生成器 3、Zookeeper实现分布式队列3.1、 设计思路3.2、 使用Apache …

Springboot学生成绩管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 学生成绩管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统 具有完整的源代码和数据库&…

Android:实现手机前后摄像头预览同开

效果展示 一.概述 本博文讲解如何实现手机前后两颗摄像头同时预览并显示 我之前博文《OpenGLES:GLSurfaceView实现Android Camera预览》对单颗摄像头预览做过详细讲解,而前后双摄实现原理其实也并不复杂,粗糙点说就是把单摄像头预览流程写两…

TikTok环保运动:短视频平台上的可持续发展

在当今社交媒体的繁荣时代,TikTok已经成为全球范围内年轻一代最喜爱的短视频分享平台之一。 数以亿计的用户在这里分享他们的创造力、生活片段和喜好。然而,随着全球环保意识的不断增强,TikTok也成为了一个独特的环境,倡导可持续…

Node-RED系列教程-25node-red获取天气

安装节点:node-red-contrib-weather 节点图标如下: 使用说明:node-red-contrib-weather (node) - Node-RED 流程图中填写经度和纬度即可。 演示: json内容: {

【重磅】这就是元宇宙碰撞的后果

筹备了一年多——朋友们,它终于来了! 我们刚刚宣布官方 Aavegotchi x Sandbox 在 X 上共享元宇宙体验。 10 月 25 日在 The Sandbox 上线,有两份可领取的空投。 Gotchi 游戏即将爆发。你们兴奋吗?

氟化钡镜片

氟化钡晶体具有良好的光学透过性能,在0.15μm-14.5μm的光谱范围内,可以用作紫外和红外光学窗口。同时,又具有优良的闪烁性能,成为高能物理与核物理、核医学等领域中重要的晶体材料。 特此记录 anlog 2023年10月7日

Linux 逻辑卷

目录 一、认识 1、概念 2、术语: 1)物理存储设备 2)物理卷 3)卷组 4)PE物理区域 5)逻辑卷 6)LE逻辑区域 7)VGDA卷组描述符区域 二、部署逻辑卷 1、物理卷管理 2、卷组…

防御安全第五次作业

1. 什么是数据认证,有什么作用,有哪些实现的技术手段? 数据认证是指保证数据的真实性、完整性和可信度,以确保数据不被篡改或伪造。其作用包括但不限于: 保护关键数据不被恶意篡改或损坏 提供数据来源的可靠性和安全性…

E: Unable to locate package XXX

问题描述: 当使用 apt-get install XXX 安装包时,出现错误 E: Unable to locate package XXX 解决方法: apt-get update apt-get install XXX

为什么append到父节点后的子节点发生修改,父节点打印出来的也会变化

今天走查前端代码&#xff0c;发现历史代码写出来的不规范&#xff0c;但是他还是在生产运行了很久的代码&#xff0c;仔细思量后发现&#xff0c;其实原理是对的&#xff0c;只是看起来不美观&#xff0c;不易读而已。 废话不说&#xff0c;先上demo代码 <!DOCTYPE html&g…

【Spring Boot】创建一个 Spring Boot 项目

创建一个 Spring Boot 项目 1. 安装插件2. 创建 Spring Boot 项目3. 项目目录介绍和运行注意事项 1. 安装插件 IDEA 中安装 Spring Boot Helper / Spring Assistant / Spring Initializr and Assistant插件才能创建 Spring Boot 项⽬ &#xff08;有时候不用安装&#xff0c;直…

维修派单系统好用吗?如何实现数字化后勤管理?

在当今社会&#xff0c;各种设备和设施的正常运转对于单位和组织来说至关重要。然而&#xff0c;由于各种因素的影响&#xff0c;设备和设施在日常运行过程中难免会出现故障。这时&#xff0c;高效的维修服务就显得尤为重要。而“的修”维修派单系统&#xff0c;就是一种专为维…

2023八股每日一题(九月份)

文章目录 9月13日【JDK、JRE、JVM之间的区别】9月14日【什么是面向对象&#xff1f;】9月15日【和equals比较】9月16日【final 关键字的作用】9月17日【String、StringBuffer、StringBuilder】9月18日【重载和重写的区别】9月19日【接口和抽象类的区别】9月20日【List和Set的区…

力扣第572题 另一棵树的子树 c++深度(DFS)注释版

题目 572. 另一棵树的子树 简单 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有…

数据挖掘(3)特征化

从数据分析角度&#xff0c;DM分为两类&#xff0c;描述式数据挖掘&#xff0c;预测式数据挖掘。描述式数据挖掘是以简介概要的方式描述数据&#xff0c;并提供数据的一般性质。预测式数据挖掘分析数据建立模型并试图预测新数据集的行为。 DM的分类&#xff1a; 描述式DM&#…

为什么企业都在申报“高新技术”?有以下十大好处!

随着信息技术时代的迅速发展&#xff0c;很多企业为了能够在同行中脱颖而出&#xff0c;都会选择办理一些和企业相关的资质证书&#xff0c;以便提升企业的核心竞争力&#xff0c;今天同邦信息科技的小编就告诉大家为什么那么多企业都选择申报“高新技术”企业&#xff1f; 首先…

Cocos Creator3.8 项目实战(四)巧用九宫格图像拉伸

一、为什么要使用九宫格图像拉伸 相信做过前端的同学都知道&#xff0c;ui &#xff08;图片&#xff09;资源对包体大小和内存都有非常直接的影响。 通常ui 资源都是图片&#xff0c;也是最占资源量的资源类型&#xff0c;游戏中的ui 资源还是人机交互的最重要的部分&#xff…

若依分离版-前端使用

1 执行 npm install --registryhttps://registry.npm.taobao.org&#xff0c;报错信息如下 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: ktg-mes-ui3.8.2 npm ERR! Found: vue2.6.12 npm ERR! node_modu…