ProtoBuf入门概念

news2024/10/1 19:23:29

目录:

  1. 序列化概念
  2. ProtoBuf是什么
  3. ProtoBuf的使⽤特点
  4. 安装ProtoBuf
  5. 如何学习ProtoBuf

1.序列化概念

序列化和反序列化

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

什么情况下需要序列化?

  • 存储数据:当你想把的内存中的对象状态保存到⼀个⽂件中或者存到数据库中时。
  • ⽹络传输:⽹络直接传输数据,但是⽆法直接传输对象,所以要在传输前序列化,传输完成后反
  • 序列化成对象。例如我们之前学习过socket编程中发送与接收数据。

如何实现序列化?

  • xml、json、protobuf

2.ProtoBuf是什么?

  • Protocol Buffers是 Google 的⼀种语⾔⽆关、平台⽆关、可扩展的序列化结构数据的⽅法,它可⽤于(数据)通信协议、数据存储等。
  • Protocol Buffers 类⽐于 XML,是⼀种灵活,⾼效,⾃动化机制的结构数据序列化⽅法,但是⽐XML 更⼩、更快、更为简单。
  • 你可以定义数据的结构,然后使⽤特殊⽣成的源代码轻松的在各种数据流中使⽤各种语⾔进⾏编写和读取结构数据。你甚⾄可以更新数据结构,⽽不破坏由旧数据结构编译的已部署程序。

简单来讲,ProtoBuf(全称为Protocol Buffer)是让结构数据序列化的⽅法,其具有以下特点:

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

3.ProtoBuf的使⽤特点

  1. 编写.proto⽂件,⽬的是为了定义结构对象(message)及属性内容。
  2. 使⽤protoc编译器编译.proto⽂件,⽣成⼀系列接⼝代码。
  3. 依赖⽣成的接⼝,实现对.proto⽂件中定义的字段进⾏设置和获取,和对message对象进⾏序列化和反序列化。

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

4.安装ProtoBuf

略~

网上搜一下安装教程

5.如何学习ProtoBuf?

  1. 了解protobuf的基本概念和用途:protobuf是一种跨语言的序列化数据格式,它定义了一种数据交换格式,使得不同平台和语言之间的数据传输变得更加方便和安全。
  2. 学习protobuf的语法和结构:protobuf使用protocol buffer语言(protobuf语言)来定义数据结构,它是一种基于Google的Protocol Buffers库的扩展语言。学习protobuf语言需要掌握protobuf的基本语法和结构,包括消息类型、字段类型、标签、注释等。
  3. 学习protobuf的编译器和工具:protobuf编译器可以将protobuf定义文件编译成不同编程语言的数据交换格式,包括二进制格式、文本格式等。学习protobuf的编译器和工具需要掌握编译器的使用方法和相关工具的使用。
  4. 实践编写protobuf定义文件:通过编写实际的protobuf定义文件,可以深入了解protobuf的语法和结构,并且可以更好地掌握protobuf的使用方法和技巧。
  5. 学习protobuf的序列化和反序列化过程:protobuf的序列化和反序列化过程是实现不同平台和语言之间的数据传输的关键步骤。学习protobuf的序列化和反序列化过程需要掌握protobuf的序列化和反序列化方法,包括二进制格式、文本格式等。
  6. 学习protobuf的高级特性:protobuf除了基本的序列化数据格式功能外,还提供了很多高级特性,例如自定义扩展、自定义标签、自定义消息等。学习protobuf的高级特性需要深入了解protobuf的内部结构和实现原理。

6.总结:

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

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

相关文章

【DRONECAN】(二)DRONECAN_GUI_TOOL使用

【DRONECAN】(二)DRONECAN_GUI_TOOL使用 前言 DRONECAN_GUI_TOOL是DRONECAN官方开发的一个DRONECAN调试工具,在上一篇文章已经介绍过DRONECAN的背景了,这篇文章主要介绍一下DRONECAN_GUI_TOOL的使用。 DRONECAN_GUI_TOOL在开发…

【从零开始学习JAVA | 第三十一篇】异常体系介绍

前言: 本文我们将为大家介绍一下异常的整个体系,而我们学习异常,不是为了敲代码的时候不出异常,而是为了能够熟练的处理异常,如何解决代码中的异常。 异常的两大分类: 我们就以这张图作为线索来详细介绍一…

Spring Cloud【SkyWalking日志、SkyWalking告警 、Skywalking自定义告警规则】(十五)

目录 分布式请求链路追踪_SkyWalking日志 分布式请求链路追踪_SkyWalking告警 分布式请求链路追踪_Skywalking自定义告警规则 分布式请求链路追踪_SkyWalking日志 POM中引入相关依赖 Skywalking8.4.0版本开始才支持收集日志功能&#xff0c;同时pom需引用以下依赖。 <…

如何理解教育数字化转型?

一、教育数字化转型 教育数字化转型是指将传统的教育方式和教学方法通过应用数字技术进行改进和创新&#xff0c;实现教育过程的数字化、网络化、智能化。它包括利用数字技术改变教育内容的呈现方式、改变组织方式、改变评估和反馈方式。 教育数字化的目的是为了提高教育的效率…

KubeVela篇06:Kubevela Addon插件安装原理

addon支持从本地、git仓库、helm chart仓库安装,最终原理都相同,因此我们以本地安装为例。 完整流程如下: 从指定目录读取一个完整的addon安装包。 根据metadata.yaml配置文件,校验插件要求的kubevela、k8s的版本,不满足版本要求则终止安装。 根据metadata.yaml配置文件…

MS VC 2022开发Linux应用记录之02篇-开发调试Linux QT应用

MS VC 2022开发Linux应用记录之02篇 1. 安装QT5 apt-get update apt-get install build-essential apt-get install qtcreator apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools apt-get install qtcreator apt-get install qt5* apt-get install li…

LeetCode 热题 100(三):普通数组。53. 最大子数组和、 56. 合并区间、189. 轮转数组、238. 除自身以外数组的乘积

一、题目一&#xff1a; 53. 最大子数组和 题目要求&#xff1a; 思路&#xff1a;贪心算法。 求每个区间的和。 局部最优&#xff1a;当前“连续和”为负数的时候立刻放弃&#xff0c;从下一个元素重新计算“连续和”&#xff0c;因为负数加上下一个元素 “连续和”只会越…

硬件系统工程师宝典(33)-----EEPROM电路如何设计?

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。 上篇我们了解了嵌入式应用中应用领域不同&#xff0c;所采用的CPU也不同&#xff0c;不过CPU部分电路的设计过程都较为相似。并且&#xff0c;我们…

抖音seo源码开发技术解析

抖音seo矩阵系统源码开发部署基于PHP语言&#xff0c;结合视频剪辑基础框架逻辑&#xff0c; 一、 抖音SEO源码开发技术解析主要包括以下内容&#xff1a; 抖音SEO的概念&#xff1a;简单介绍抖音SEO的概念、作用和流程。 SEO优化技巧&#xff1a;详细讲解SEO优化的技巧&…

C++ - list介绍 和 list的模拟实现

list介绍 list 是一个支持在常数范围内&#xff0c;任意位置进行插入删除的序列式容器&#xff0c;且这个容器可以前后双向迭代。我们可以把 list 理解为 双向循环链表的结构。 于其他结构的容器相比&#xff0c;list在 任意位置进行插入和函数的效率要高很多&#xff1b;而li…

JavaScript:Promise 组合器

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Promise在 JavaScript 中并不是一个新概念。它们是表示异步操作的最终完成或失败及其结果值的对象。 Promise 有三种可能的状态&#xff1a;pending – 初始状态&#xff08;仍在等待&#xff09;、已完成– Promis…

[NLP]使用Alpaca-Lora基于llama模型进行微调教程

Stanford Alpaca 是在 LLaMA 整个模型上微调&#xff0c;即对预训练模型中的所有参数都进行微调&#xff08;full fine-tuning&#xff09;。但该方法对于硬件成本要求仍然偏高且训练低效。 [NLP]理解大型语言模型高效微调(PEFT) 因此&#xff0c; Alpaca-Lora 则是利用 Lora…

Qt6 Qt Quick UI原型学习QML第七篇

文章目录 效果演示QML语法 ClickableImageV2.qmlQML语法 EasingCurves.qml时钟小球滚动QML 源码## 时钟小球滚动QML解释 语法解释参考动画片动画元素应用动画可点击图像V2上升的物体第一个对象第二个对象第三个对象缓和曲线分组动画并行动画连续动画嵌套动画 效果演示 QML语法 …

给APK签名—两种方式(flutter android 安装包)

前提&#xff1a;给未签名的apk签名&#xff0c;可以先检查下apk有没有签名 通过命令行查看&#xff1a;打开终端或命令行界面&#xff0c;导入包含APK文件的目录&#xff0c;并执行以下命令&#xff1a; keytool -printcert -jarfile your_app.apk 将 your_app.apk替换为要检查…

MybatisPlus查询条件为空字符串或null问题及解决

参考&#xff1a;https://www.yii666.com/blog/292928.html 解决办法 mybatisplus的条件构造器方法 eq()、like()等这些方法能支持第三个参数 condition condition是一个布尔值&#xff0c;当condition为false 时&#xff0c;当前这个条件方法不会生效&#xff0c;即生成的s…

曲线拟合曲面拟合(MATLAB拟合工具箱)位置前馈量计算(压力闭环控制应用)

利用PLC进行压力闭环控制的项目背景介绍请查看下面文章链接,这里不再赘述。 信捷PLC压力闭环控制应用(C语言完整PD、PID源代码)_RXXW_Dor的博客-CSDN博客闭环控制的系列文章,可以查看PID专栏的的系列文章,链接如下:张力控制之速度闭环(速度前馈量计算)_RXXW_Dor的博客-CSD…

flash attention 2论文学习

flash attention作者Tri Dao发布了flash attention 2&#xff0c;性能为flash attention的2倍。 优化点主要如下&#xff1a; 一、减少 non-matmul FLOPs A00中由于tensor core的存在&#xff0c;使得gpu对于浮点矩阵运算吞吐很高&#xff0c;如FP16/BF16可以达到312 TFLOPs/…

【弹力设计篇】聊聊熔断设计

为什么需要熔断 熔断这个词一听从生活中就是保险丝超过一定的温度后自动断开&#xff0c;以此来保护家用电器&#xff0c;属于电路中自我保护装置。如果没有熔断&#xff0c;那么家用电器一定会损坏的。 进一步再来分析一下&#xff0c;在分布式系统中&#xff0c;各个系统之间…

建立TCP连接的各个系统调用

TCP 连接的过程图 服务器 socket() 函数 socket() 返回的 sockfd 是一个描述符。socket()对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字&#xff0c;而socket()用于创建一个socket描述符&#xff08;socket descriptor&#xff09;&#xff0c;它唯一标识…

PX4仿真jMAVSim没有界面

切换java版本,使用java-8 sudo update-alternatives --config java删除旧文件 rm -rf Tools/jMAVSim/out编辑accessibility.properties 文件&#xff1a; sudo gedit /etc/java-8-openjdk/accessibility.properties注释掉下面这行 #assistive_technologiesorg.GNOME.Acessi…