ProtoBuf入门概念

目录:

  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.mzph.cn/news/7878.shtml

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

相关文章

【搜索引擎Solr】Apache Solr 神经搜索

Sease[1] 与 Alessandro Benedetti(Apache Lucene/Solr PMC 成员和提交者)和 Elia Porciani(Sease 研发软件工程师)共同为开源社区贡献了 Apache Solr 中神经搜索的第一个里程碑。 它依赖于 Apache Lucene 实现 [2] 进行 K-最近邻…

找不同的字符

题目: 给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 解题思路 把字符串转换成字典,key为字符,value为字符出现的次数&…

【Python笔记】Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面

这篇文章,主要介绍Python xlrd pymysql读取excel文件数据并且将数据插入到MySQL数据库里面。 目录 一、Python读取excel 1.1、安装xlrd库 1.2、打开excel工作簿 1.3、获取sheet工作表 1.4、操作row数据行 1.5、操作column数据列 1.6、操作单元格 二、读取…

Bean 作用域和生命周期

1.通过⼀个案例来看 Bean 作⽤域的问题 假设现在有⼀个公共的 Bean,提供给 A ⽤户和 B ⽤户使⽤,然⽽在使⽤的途中 A ⽤户却“悄悄”地修 改了公共 Bean 的数据,导致 B ⽤户在使⽤时发⽣了预期之外的逻辑错误。 1.1 被修改的 Bean 案例 公…

【N32L40X】学习笔记04-gpio中断库

gpio中断 该函数库的目的就是在统一的地方配置,将配置的不同项放置在一个结构体内部使用一个枚举来定义一个的别名 NVIC 寄存器 NVIC 相关的寄存器定义了可以在 core_cm4.h 文件中找到。我们直接通过程序的定义来分 析 NVIC 相关的寄存器,其定义如下…

RocketMQ(1.NameServer源码)

NameServer功能简述 主要功能如下 服务注册与发现:Nameserver扮演了RocketMQ集群中服务注册中心的角色。当RocketMQ中的Broker、Producer和Consumer启动时,它们会向Nameserver注册自己的网络地址和角色信息。Nameserver维护着集群中所有活跃实例的信息…

openfeign调用文件服务的文件上传接口报错:Current request is not a multipart request

解决办法&#xff1a; Api 接口 Api(tags "文件上接口") RestController public class FileController {Autowiredprivate FileFeignService fileFeignService;ApiOperation("上传文件")PostMapping(value "/uploadFile")public ResData<…

python常用数据类型区别

1.set集合和dict字典的区别 set没有对应的value值&#xff0c;两者都是可变类型&#xff0c;即不可哈希;两者的内部元素是不可变类型&#xff0c;即可哈希&#xff0c;都无索引&#xff0c;不可进行切片和根据索引进行的操作。 2.set集合和list列表的区别 相同点 都是可变类…

zookeeper学习(一) Standalone模式(单机模式)安装

安装准备 centos7环境jdk1.8环境zookeeper安装包 安装jdk 上传jdk安装包解压安装包到目录中 tar -zxvf jdk-8u361-linux-x64.tar.gz如果需要指定目录可以在后面加上 -C&#xff0c;如 tar -zxvf jdk-8u361-linux-x64.tar.gz -C 目录配置jdk环境变量 vim /etc/profile打开…

Dijkstra 算法——求解最短路径问题

迪杰斯特拉算法&#xff08;Dijkstra’s algorithm&#xff09;是一种用于解决单源最短路径问题的贪心算法。它可以找到从一个起始顶点到其他所有顶点的最短路径&#xff0c;并且适用于边的权重非负的图。 算法步骤如下&#xff1a; 创建一个数组 dist&#xff0c;用于保存起…

react当我们有两个完全不相关的组件想要通信时,就可以利用这种模式,其中一个组件负责订阅某个消息,而另一个元素则负责发送这个消息。使用Context配合

在nextjs项目中&#xff0c;发现两个组件没啥关系&#xff0c;例如一个是一直存在的头部组件&#xff0c;另一个是页面中的组件&#xff0c;当我点击头部组件中的特定按钮时&#xff0c;把数据传递到页面组件中&#xff0c;页面组件接受到canshu数据后在做其他操作&#xff0c;…

入门前端监控

背景 前端监控是指通过一系列手段对Web页面或应用程序进行实时监控和数据采集&#xff0c;以了解页面或应用程序的性能状况、用户行为等等&#xff0c;并及时发现和解决潜在的问题。一个完整的前端监控平台可以包括&#xff1a;数据收集与上报、数据整理与存储、数据展示这里仅…

redis---持久化和数据类型的基本操作

目录 1.redis持久化 2.redis数据类型 1.redis持久化 【1】RDB 启用rdb&#xff0c;查看是否有对应文件生成 1.进入配置文件&#xff0c;修改配置 [rootclient ~]# vim /etc/redis.conf save 60 5 # 自动出发机制&#xff08;60秒内进行5次操…

Java连锁门诊医院HIS信息管理系统源码

Java连锁门诊医院HIS信息管理系统源码&#xff1a;SaaS运维平台多医院多机构多门诊入驻强大的电子病历完整开发文档 一、系统概述 ❉采用主流成熟技术&#xff0c;软件结构简洁、代码规范易阅读&#xff0c;SaaS应用&#xff0c;全浏览器访问前后端分离&#xff0c;多服务协同…

通过两种实现方式理解CANoe TC8 demo是如何判断接收的以太网报文里的字段的

假设有一个测试用例,需求是:编写一个测试用例,发送一条icmpv4 echo request报文给DUT,identifier字段设置为10。判断DUT能够回复icmpv4 echo reply报文,且identifier字段值为10。 实现:在canoe的simulation setup界面插入一个test节点,ip地址为:192.168.0.1,mac地址为…

具身智能,是机器人的“冷饭热炒”吗?

大模型正如火如荼&#xff0c;下一个AI风口就来了。 如果你关注2023世界人工智能大会等行业峰会&#xff0c;以及英伟达、微软、谷歌、特斯拉和国內科技大厂的最新发布会&#xff0c;除了“大模型”&#xff0c;应该会听到另一个高频词——具身智能。 所谓具身智能Embodied AI …

IRIS搭建docker

之前把web实现了docker&#xff0c;开发或测试环境可能需要开发自己搭数据库&#xff0c;为了方便使用&#xff0c;把数据库也做一个docker。 由于原生的CentOS我还有改yum仓库&#xff0c;所以这次从之前lis搞的改好yum的镜像开始&#xff08;从改好yum的lisnew的镜像创建lis…

【Linux】Ubuntu基本使用与配置, 以及常见问题汇总(一)

前言 大学期间&#xff0c;感觉很多时候学习课外知识都是被推着往前走&#xff0c;很多内容并没有深入去学习&#xff0c;知识的记录受限于所学比较片面&#xff0c;如今渐渐意识到似乎并没有建立起相关知识的体系架构&#xff0c;缺乏一个系统学习并整理的过程。本文将以Ubunt…

【LangChain】检索器之MultiQueryRetriever

MultiQueryRetriever 概要内容总结 概要 基于距离的向量数据库检索在高维空间中嵌入查询&#xff0c;并根据“距离”查找相似的嵌入文档。 但是&#xff0c;如果查询措辞发生细微变化&#xff0c;或者嵌入不能很好地捕获数据的语义&#xff0c;检索可能会产生不同的结果。有时…

grid map学习笔记1之Ubuntu18.04+ROS-melodic编译安装grid_map栅格地图及示例运行

文章目录 0 引言1 安装依赖和编译1.1 安装依赖1.2 下载编译 2 运行示例2.1 simple_demo2.2 tutorial_demo2.3 iterators_demo2.4 image_to_gridmap_demo2.5 grid_map_to_image_demo2.6 opencv_demo2.7 resolution_change_demo2.8 filters_demo2.9 interpolation_demo 0 引言 苏…