前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >初识ProtoBuf

初识ProtoBuf

作者头像
用户11029129
发布2025-02-17 18:42:15
发布2025-02-17 18:42:15
5400
代码可运行
举报
文章被收录于专栏:编程学习编程学习
运行总次数:0
代码可运行

初识ProtoBuf

序列化和反序列化

我们在发微信语音时,实际上是将声音信号转化为电信号发送的,而对端在接收语音时又将电信号转化为了声音信号,序列化和反序列化的本质也是如此。在网络传输中,传递的都是二进制序列,而将数据转化为二进制序列的过程,我们就称为 序列化,对方收到了二进制序列之后把二进制序列转化为数据的过程,我们称为 反序列化

除了网络传输以外,本地的持久化存储以及数据库等也会用到序列化和反序列化。

实现序列化的工具:JSON、XML、ProtoBuf ...

什么是ProtoBuf

而我们今天要学习的就是ProtoBuf(后面简称PB),而PB就是一种 将结构化数据进行序列化的一种方式。

ProtoBuf的特点

  • 语言无关、平台无关:即PB支持Java、C++、Python等多种语言,支持多个平台。
  • 高效:即比XML更小(体积)、更快、更为简单。
  • 拓展性、兼容性好:你可以更新数据结构,但是不影响和破坏原有的数据结构。
  • 使用特点:PB是需要依赖通过 编译生成 的头文件和源文件来使用的。

开发人员在开发设计类时,有些类的设计是比较耗时的,比如:

代码语言:javascript
代码运行次数:0
复制
class XXX{
	// 定义一系列字段属性
	// 一些处理字段的方法: Get()、Set()
	// 处理类的方法: 序列化和反序列化方法
	// ...
};

在实现类中的一些方法以及序列化和反序列化方法对于开发人员来说是比较耗时的,但是如果我们加入PB来进行序列化和反序列化就会不同:

代码语言:javascript
代码运行次数:0
复制
// ProtoBuf
Message XXX
{
	// 定义一系列属性字段
}

PB就是通过Message编译来生成对应代码的头文件和源文件。

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

ProtoBuf安装

Windows下安装PB

PB编译器下载地址:https://github.com/protocolbuffers/protobuf/releases

随便选择一个较新的版本进行安装,安装符合自己操作系统的版本。这里我选择使用Protocol Buffers 21.1版本,使用Windows X64安装包:

下载后将压缩包解压到本地目录下。解压后的文件包括bin、include、readme.txt文件:

而我们需要的就是bin目录下的protoc.exe文件,编译器路径实际上就是bin目录下的路径,将路径添加在环境变量当中:

点击后找到Path,点击编辑:

随后再将赋值的bin目录添加到环境变量中:

最后依次点击确定,就可以将环境变量设置成功了。验证安装成功,打开cmd,输入 protoc --version ,最后显示的内容是PB编译器的版本,则配置成功。

Linux下安装PB

下载ProtoBuf之前必须要安装一些依赖库:autoconf、automake、libtool、curl、make、g++、unzip,如果没有安装,使用如下命令安装:

Ubuntu用户sudo apt-get install autoconf automake libtool curl make g++ unzip -y

CentOS用户sudo yum install autoconf automake libtool curl make g++ unzip -y

我们依旧进入PB官网下载:https://github.com/protocolbuffers/protobuf/releases,然后点击较新版本进行安装,由于我选择的是21版本,所以这里我依旧使用21版本,这里有许多不同语言版本选择,如果你只使用C++编写可以下载C++版本,Java则可以下载Java版本等。

前两个-all表示可以支持所有语言,右键复制下载链接,到Linux终端去下载,复制了对应安装包路径之后,在Linux终端下使用 wget 命令,后面跟上复制的网址,回车即可下载到Linux:

  再使用 unzip 来解压对应的安装包(unzip protobuf-all-21.1.zip):

现在已经将安装包解压,接下来进入到解压好的文件中,执行 ./autogen.sh编译代码(注意:如果你使用了具体某一种语言的安装包不需要执行这条命令),这条命令执行后,第二步执行configure,有两种执行方式,任选其中一种即可:

  1. protobuf默认安装在 /usr/local ⽬录,lib、bin都是分散的 ./configure
  2. 修改安装⽬录,统⼀安装在/usr/local/protobuf下 ./configure --prefix=/usr/local/protobuf

这里为了同一安装在同一目录下,我们使用第二条方式:

执行完上述命令之后,我们可以在目录里发现Makefile文件,那么接下来我们就只需要执行 make 命令即可编译,这个过程可能比较久,大概15min左右。

编译完成后,再执行 make check 用来检查编译是否有问题,此过程大概也需要15min左右

出现了上述内容,则表示测试没有问题,最后执行 sudo make install 命令进行安装。安装完成后,还有需要注意的点,需要你回忆⼀下在执⾏configure时,如果当时选择了第⼀种执⾏⽅式,也就是./configure ,那么到这就可以正常使⽤protobuf了。如果选择了第⼆种执⾏⽅式,即修改了安装目录,那么还需要在/etc/profile 中添加⼀些内容,使用vim编译器打开文件,并将下述内容复制追加到文件的最后处 sudo vim /etc/profile

代码语言:javascript
代码运行次数:0
复制
# 添加内容如下:
#(动态库搜索路径) 程序加载运⾏期间查找动态链接库时指定除了系统默认路径之外的其他路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
#(静态库搜索路径) 程序编译期间查找动态链接库时指定查找共享库的路径
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
#执⾏程序搜索路径
export PATH=$PATH:/usr/local/protobuf/bin/
#c程序头⽂件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
#c++程序头⽂件搜索路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
#pkg-config 路径
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

添加完成之后,让配置文件生效,我们使用 source /etc/profile 命令使得配置文件生效。最后再使用 protoc --version 来检查是否安装成功。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初识ProtoBuf
    • 序列化和反序列化
    • 什么是ProtoBuf
    • ProtoBuf的特点
  • ProtoBuf安装
    • Windows下安装PB
    • Linux下安装PB
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档