当前位置: 首页 > news >正文

Protobuf学习(1)—— 初识与安装

目录

一,介绍

1.1 序列化概念

1.2 什么是 Protobuf

1.3 使用特点

二,安装 Protobuf

2.1 Windows 下安装

2.2 Linux 下安装

一,介绍

protobuf在百度百科里的介绍如下:

1.1 序列化概念

关于对象的序列化和反序列化:

  • 序列化:把对象转换成字节序列的过程,比如打视频电话,将声音信号和光信号转换成能够让机器识别的二进制信号
  • 反序列化:将字节序列恢复为对象的过程,比如视频电话中对方能从手机看到我发手机摄像头内容和声音

什么时候需要序列化?

  • 存储数据:当你想把的内存中的对象状态保存到一个文件中或者存到数据库中时
  • 网络传输:网络直接传输数据,但是无法直接传输对象,所以要在传输前序列化,传输完成后反序列化成对象。例如我们之前学习过socket编程中发送与接收数据:计算机网络(五) —— 自定义协议简单网络程序-CSDN博客

如何实现序列化?

  • xml:可扩展标记语言,被设计用来传输和存储数据,不用于表现和展示数据,HTML 则用来表现数据
  • json:JSON格式化是指将JSON数据以一种清晰、易读的方式进行排列和显示,我们上面链接中的博客中使用的就是json
  • protobuf:我们本系列的主角

1.2 什么是 Protobuf

  • Protocol Buffers 是 Google 的一种语⾔无关、平台无关、可扩展的序列化结构数据的方法,可用于(数据)通信协议、数据存储
  • Protocol Buffers 类比于XML,更种灵活、高效、自动化机制的结构数据序列化方法,但是比 XML更小、更快、更为简单
  • 可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序

简单来说,Protobuf是让数据结构序列化的一套方案,特点有:

  • 语言无关、平台无关:ProtoBuf支持Java、C++、Python等多种语言,⽀持多个平台
  • 高效:即比XML更小、更快、更为简单
  • 扩展性、兼容性好:可以更新数据结构,而不影响和破坏原有的旧程序

1.3 使用特点

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

总的来说:ProtoBuf是需要依赖通过编译生成的头文件和源文件来使用的

这种代码生成机制可以让开发人员可以大大降低编写协议解析的代码的成本

二,安装 Protobuf

2.1 Windows 下安装

官方仓库为:Releases · protocolbuffers/protobuf · GitHub

我们以V21.11为例,找到对应的电脑配置下载即可:Release Protocol Buffers v21.11 · protocolbuffers/protobuf · GitHub

下载好后解压,是个这样的文件夹:

我们把bin这个文件夹路径加到环境变量Path中去:

打开cmd,查看版本,有显示说明安装成功:

2.2 Linux 下安装

下面以 Ubuntu 系统为例

下载Protobuf 前要安装依赖库:autoconfautomakelibtoolcurlmakeg++unzip

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

安装好后,再次打开:Release Protocol Buffers v21.11 · protocolbuffers/protobuf · GitHub

all 表示 protobuf支持所有语言,然后在 Shell 中使用 wget 命令就可以直接下载到服务器上:

wget https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip

下载需要一点时间,也可以下载到windows本地,然后通过 XShell 上传到服务器

下载后解压得到一个目录,里面是protobuf的一些源码:

进入这个文件,首先运行 autogen.sh:

然后运行 configure:

protobuf 是默认安装在 /usr/local 目录的,lib 和 bin 是分散的,所以我们可以修改下安装目录,统一安装在 /usr/local/protobuf 下

然后我们可以在刚刚解压的目录下找到一个 makefile 文件:

然后执行make让其开始编译,时间比较久,需要十多分钟,然后执行 make check 也需要十多分钟(具体时长也看机器配置,我的云服务器两个都搞了近30分钟555)

当出现这些字样说明一切正常:

然后执行下列命令:

sudo make install

到此,如果我们前面执行 configure 时没有指定安装目录,那么现在就可以正常使用 protobuf 了,但是上面我们指定了安装目录,所以我们还需要加一些东西

打开配置文件:

sudo vim /etc/profile

按U旁边的 I 键进入编辑模式,鼠标右键粘贴添加下列内容:

#(动态库搜索路径) 程序加载运⾏期间查找动态链接库时指定除了系统默认路径之外的其他路径
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/

然后按ESC键,按住Shift 键再按下W和Q键表示保存并退出,最后重新执行 /etc/profile文件:

 source /etc/profile

最后检查是否安装成功,输入检查版本命令:

 source /etc/profile

如果能打印版本,表示安装成功:

http://www.dtcms.com/a/329766.html

相关文章:

  • 代理解决跨域
  • SparseArray ArrayMap
  • Activity和Fragment生命周期
  • Spring进阶(八股篇)
  • 栈和队列详解
  • LeetCode刷题记录----437.路径总和Ⅲ(medium)
  • 学习:JS进阶[10]内置构造函数
  • HunyuanVideo-Avatar:为多个角色制作高保真音频驱动的人体动画
  • C++哈希进阶-位图
  • 计算机网络技术-知识篇(Day.1)
  • java14学习笔记-打包工具 (Incubator)
  • MoonBit Perals Vol.05: 函数式里的依赖注入:Reader Monad
  • JPrint免费的Web静默打印控件:PDF打印中文乱码异常解决方案
  • 什么是JSP和Servlet以及二者的关系
  • window显示驱动开发—多平面覆盖 VidPN 呈现
  • MVCC底层实现原理
  • Flask入门:从零搭建Web服务器
  • 雅思大作文笔记
  • iOS 签名证书在版本迭代和iOS上架中的全流程应用
  • Docker 在 Linux 中的额外资源占用分析
  • 智汇河套,量子“风暴”:量子科技未来产业发展论坛深度研讨加速产业成果转化
  • 信息学奥林匹克竞赛(NOI/NOIP/CSP) 学习进度自查表
  • 使用 Python Selenium 和 Requests 实现歌曲网站批量下载实战
  • 嵌入式学习 day50 IMX6ULL裸机开发 - 时钟
  • Linux 5.15.189-rt87 实时内核安装 NVIDIA 显卡驱动
  • 手机充电线贴标机如何使用
  • 内存可见性和伪共享问题
  • php7 太空船运算符
  • 在实验室连接地下车库工控机及其数据采集设备
  • 《零基础入门AI:深度学习中的视觉处理(卷积神经网络(CNN)学习)》