【ProtoBuf】1.初识ProtoBuf

news2024/11/15 11:15:48

v2-51ee98b05ce2ada206b744b6ff86cbd1_r
————————————每一个不曾起舞的日子都是对生命的辜负。

一. 序列化概念

日常生活中,手机上收到的语音消息在网络中不能直接进行传输,而是通过一系列的信号,比如网络中二进制序列的转换,在传出时将语音消息转化成二进制序列进行网络传输,收到消息时再将二进制序列转化成语音消息,这种过程实际上就是序列化。

image-20230520151823201

我们写的代码同样如此,网络中传输的也一定不是直接创建的对象,而是通过对象转换的二进制序列进行传输。将对象转化为二进制序列的过程称为序列化过程,最后将二进制序列恢复为对象的过程称为反序列过程。

image-20230520153531906

由此可见,上述所说的都是在网络传输中使用。而在本地中,内存中的结构化数据也就是对象只有序列化才能放到文件里面去,这个过程同样需要序列化。此外,数据库、缓存等传入传出同样涉及序列化。

  • 所以什么是序列化和反序列化?

序列化: 把对象转换为字节序列的过程,称为对象的序列化。

反序列化: 把字节序列恢复为对象的过程?称为对象的反序列化。

  • 如何实现序列化?

通过Json、XML、ProtoBuf可以实现序列化。(本文讲的就是ProtoBuf)

二. ProtoBuf

1. 什么是ProtoBuf

ProtoBuf概念:将结构化数据进行序列化的一种方式。

2. ProtoBuf的特点

简单来讲,ProtoBuf(全称为Protocol Buffer)是让结构数据序列化的⽅法。

一. 本身特点:

  • 语⾔⽆关、平台⽆关:即ProtoBuf⽀持Java、C++、Python等多种语⾔,⽀持多个平台。
  • ⾼效:即⽐XML和Json更⼩、更快、更为简单。
  • 扩展性、兼容性好:你可以更新数据结构,⽽不影响和破坏原有的旧程序。

二. 使用特点: ProtoBuf是需要依赖 通过编译生成的头文件和源文件 来使用的。(针对C++来说)

在定义类时,需要进行三件事情:

  1. 定义一系列属性字段。
  2. 处理字段的方法:如get、set。
  3. 处理类的方法:序列化和反序列化(还有其他方法不一一列举)

对于开发者来说,定义属性字段比较简单;而另外两种方法的编写,都属于费力不讨好的活,比较耗时)

3. ProtoBuf进行序列化反序列化的流程

在ProtoBuf中,将类(class)称之为消息(message)

image-20230520155519101

依赖通过编译生成的头文件和源文件实际上就是通过message XXX生成class XXX,并且class XXX在生成时会被打散,生成源文件和头文件。


具体逻辑:

image-20230520161935348

  1. 编写.proto文件,目的是为了定义结构对象(message)及属性内容。
  2. 使用photoc编译器编译.proto文件,生成一系列接口代码,才能放在新生成头文件和源文件中。
  3. 依赖生成的接口,将编译生成的头文件包含进我们的代码中,实现对.proto文件中定义的字段进行设置和获取,和对message对象进行序列化和反序列化。

总的来说:ProtoBuf是需要依赖通过编译⽣成的头⽂件和源⽂件来使⽤的。有了这种代码⽣成机制,开发⼈员再也不⽤吭哧吭哧地编写那些协议解析的代码了(⼲这种活是典型的吃⼒不讨好)。

三. 本章总结

image-20230520161505538

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多线技术:TDI时间延迟积分

多线技术:TDI时间延迟积分 在比较暗的环境下拍照,清晰成像的条件,是CMOS芯片获取足够的光。而获得足够光的方法有: 方案1.增加单位时间的光照强度(光源、大镜头收集光) 方案2.增加CMOS感光时长&#xf…

国潮还能怎么玩?小红书用户画像速看!

所谓“国潮”,概括来说就是“国风潮流”。主要有两层含义:其一,有中国文化和传统的基因;其二,能将传统文化与时下潮流相融合,使产品更具时尚感。在“国潮”元年之前,“国潮”大多指狭义上的特定…

macOS Ventura 13.5beta (22G5027e)发布

系统介绍 黑果魏叔 5 月 20 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 更新(内部版本号:22G5027e),本次更新距离上次发布隔了 17 天。 macOS Ventura 带来了台前调度、连续互通相机、Face…

四象限法进程调度

周二收到一篇推送 一次云上网络毫秒级的优化与实践,很有意义的实践和探索,建议阅读,文章不长,没有冗长的源码分析,结论很清晰。 谈谈我的看法。 多少有种感觉,Linux 越来越像个响应系统而不是服务器。 虚…

TimesNet:用于一般时间序列分析的时间二维变化模型(代码解析)

前言 TimesNet:用于一般时间序列分析的时间二维变化模型论文下载地址,Github项目地址,论文解读系列本文针对TimesNet模型参数与模型架构开源代码进行讲解,本人水平有限,若出现解读错误,欢迎指出开源代码中…

回归分析-简单线性回归推导

回归分析-简单线性回归模型 在大数据分析中,回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因…

浏览器免费安装ChatGPT插件与国内免费ChatGPT分享

文章目录 一、什么是ChatGPT?ChatGPT的功能: 二、如果在Edge上安装chatgpt插件三、国内免费ChatGPT四、ChatGPT程序员的影响五、Chatgp能取代程序员吗? 一、什么是ChatGPT? ChatGPT是一种基于自然语言处理的机器学习算法&#xf…

【牛客刷题】 选择题整理day3~day4

在知识的海洋里彻底疯狂!!! 文章目录 1. try-catch-finally2. 方法调用3. 接口4. 1. try-catch-finally try-catch-finally的执行机制是 try块是不能被省略的,用于包含可能会抛出异常的代码,如果没有try块&#xff0c…

Linux之DNAT策略及应用与tcpdump抓包

目录 一、DNAT的介绍 二、DNAT实验设计 三、DNAT具体实验步骤操作 第一步:配置好网卡与环境 第二步:web服务器安装httpd服务,且开启httpd服务 第三步:对网关服务器进行操作 1.设置路由转发 2.设置SNAT 四、tcpdump抓包工具…

yooasset+hybridclr在android,ios端热更新测试

Hybridclr+YooAsset+Unity Run android+iOS 这个工程是用来学习YooAsset和Hybridcl,来做unity资源和代码热更新, 实现了android 和ios 双端,跑通。 源码在文章最后。 版本 很新的版本 用到的YooAsset 1.4.13 用到的HybridCLR 2.4.2 yooAsset git网址 https://github.co…

CVTE C++软开全程面试(一面、二面、群面、HR面)

一面,面了一个钟,问了很多问题,大部分是计算机的基础知识,我也只能记录下一部分。 C的继承问题,protected成员被public、protected和private继承的情况。 下面是关于protected成员在不同类型继承中的访问权限&#xff…

声音合成——Foley Sound——DECASE项目——多模态智能感知与应用——论文翻译

文章目录 概述论文翻译CONDITIONAL SOUND GENERATION USING NEURAL DISCRETE TIME-FREQUENCY REPRESENTATION LEARNINGAbstractSampleRNN是啥? Introduction个人总结(省流)补充个人感想 Approach2.1 Discrete time-frequency省流总结2.1.1 Mu…

http2

HTTP: HTTP/2 - High Performance Browser Networking (OReilly) 以下内容都是上面这篇文章的一些总结(或者说翻译hiahia) http2是由谷歌的SPDY之上演变而来的。主要涉及的技术包括: 头部压缩,多路复用,请求优先级 …

使用Docker Dockerfile构建php LNMP集成开发环境,并运行Thinkphp5

宿主机环境 系统:MAC、Windows10 Docker版本:Docker version 23.0.5 Docker Desktop:Dockerdesktop官方地址 前言 这篇主要介绍如何在Mac、Windows10使用docker搭建LNMP集成开发环境。下面我会写Dockerfile编译安装Nginxphp基础环境。mysql、redis基…

多维时序 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量时间序列预测

多维时序 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测 目录 多维时序 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 多维时序 | MATLAB实现基于贝叶斯线…

Rocky Linux 8.8 发布 - CentOS 的权威替代

Rocky Linux 8.8 发布 - CentOS 的权威替代 Rocky Linux 由 CentOS 项目的创始人 Gregory Kurtzer 领导 请访问原文链接:https://sysin.org/blog/rocky-linux-8/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 以…

Linux-Shell编程

一,shell编程的概念 1.0Shell与内核的关系 内核是Linux系统的核心,它是操作系统的最底层部分,负责管理计算机的硬件资源,例如CPU、内存、磁盘等。内核还提供了许多系统调用,供应用程序使用,例如打开文件、…

数字员工IN淄博:淄博烧烤火出圈,政务服务很圈粉!

“小饼烤炉加蘸料,灵魂烧烤三件套”,淄博烧烤近期在各大社交媒体平台火爆出圈,不少人慕名前往亲身体验人间烟火气,让这座传统工业城市再度名声鹊起,焕活了淄博文旅市场的发展潜能。淄博人民的淳朴热情造就了这一次淄博…

STM32F401RET6 LQFP64 (Nucleo-F401RE) SPI通信(主从双机SPI通信)

STM32F401RET6 LQFP64 (Nucleo-F401RE) SPI通信(主从双机SPI通信) 1.1 SPI总线介绍 SPI 通讯使用 3 条总线及片选线,3 条总线分别为 SCK、MOSI、MISO,片选线为NSS(CS) NSS 信号线由高变低 ,是 SPI 通讯的起始信号 。…

Redis系列--redis集群

一、redis集群介绍 一、简介与注意事项 由于数据量过大,当单个master挂了再slave进行选举时,会有一定时间内无法进行写操作,会出现数据的丢失。也就数说单个master复制集难以承担,因此需要对多个复制集进行集群,形成水…