初识ProtoBuf以及环境搭建(Win和Ubuntu)

初始ProtoBuf

序列化和反序列化的概念

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

什么情况下需要序列化和反序列化?

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

我们之前在学习HTTP阶段简单使用过json来进行序列化和反序列化操作,除了json还有XML和这里要介绍的ProtoBuf。

ProtoBuf的优点:

1.语言无关性,跨平台 :即支持多种语言和平台

2.高效性。比XML更小,更快,更为简单。

3.扩展性,兼容性好。你可以更新数据结构,⽽不影响和破坏原有的旧程序。

ProtoBuf支持的语言:

ProtoBuf使用特点

1. 编写 .proto ⽂件,⽬的是为了定义结构对象(message)及属性内容。
2. 使⽤ protoc 编译器编译 .proto ⽂件,⽣成⼀系列接⼝代码,存放在新⽣成头⽂件和源⽂件中。

如果我们使用的是C++,那么就会生成.h和.cc文件 

3. 依赖⽣成的接⼝,将编译⽣成的头⽂件包含进我们的代码中,实现对 .proto ⽂件中定义的字段进⾏ 设置和获取,和对 message 对象进⾏序列化和反序列化。

 总的来说:ProtoBuf 是需要依赖通过编译⽣成的头⽂件和源⽂件来使⽤的。

 这里举一个例子:

假设我们要设计一个类,可以把它看作三个部分

分别是:
定义一系列属性字段。这个是很容易的,比如int XXX;之类的

处理字段的方法:get set,这些实现起来不难,但是比较耗时。

处理的方法 :序列化 反序列化。这个就更耗时了,还有一定的难度。

因此,为了解决第二个和第三个问题,在适用了ProtoBuf后,我们在.proto文件中只需要定义对应的结构体对象,以及它的属性内容。

接着通过protoc编译器来自动的帮我们生成处理字段的方法,以及该类的序列化和反序列化。

也就是会帮我们生成一个.h和一个.cc文件,我们只需要包含它们就可以了。 

安装ProtoBuf 

这里的演示以v21.11版本为例

Windows下安装 

 先进入ProtoBuf的GitHub首页

找到 21.11

这里我们选择 win64

下载好并解压好后,打开

在bin目录里 

这个其实就是ProtoBuf的 编译器。接着我们把这个目录配置到系统环境变量中

最后,检查配置是否成功

打开cmd,输入 protoc --version

能够正确显示版本,说明配置成功了。

Ubuntu下安装 

下载 ProtoBuf 前⼀定要安装依赖库:autoconf automake libtool curl make g++ unzip 

 安装依赖库命令如下:

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

 安装好后,再回到gitHub那里

如果要在 C++ 下使⽤ ProtoBuf,可以选择cpp.zip ;
如果要在 JAVA 下使⽤ ProtoBuf,可以选择 java.zip;

在这⾥我们希望⽀持全部语⾔,所以选择 protobuf-all-21.11.zip,右键将下载链接复制出来。 

然后在我们的Ubuntu云服务下直接输入

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

 下载完后,解压zip包

unzip protobuf-all-21.11.zip

解压好后,进入生成的文件中

接下来才是真正安装ProtoBuf

进入解压好的文件后,执行以下指令:
 

# 第⼀步执⾏autogen.sh,但如果下载的是具体的某⼀⻔语⾔,不需要执⾏这⼀步。
./autogen.sh 
 
# 第⼆步执⾏configure,有两种执⾏⽅式,任选其⼀即可,如下:
# 1、protobuf默认安装在 /usr/local ⽬录,lib、bin都是分散的
./configure 
# 2、修改安装⽬录,统⼀安装在/usr/local/protobuf下
./configure --prefix=/usr/local/protobuf

完事后会多一个Makefile文件

完成后再次执行

make // 执⾏15分钟左右
make check // 执⾏15分钟左右
sudo make install

make check主要是确认之前的步骤是否正确。

另外,在make check的时候,可能会出现以下错误

出现以上错误的原因是test的模块⾥⾯有⾮常多的测试⽤例,这些⽤例对服务器环境要求特别严格,需要增⼤下swap分区

以下是步骤:

1.创建 swap 的文件(分配 3G 的swap分区大小) 

sudo fallocate -l 3G /swapfile

 2.然后执行:

swapoff -a

3.再执行

sudo fallocate -l 3G /swapfile

4.执行以下命令为 swapfile 文件设置正确的权限

sudo chmod 600 /swapfile

5.使用 mkswap 实用程序在文件上设置 Linux SWAP 区域:

sudo mkswap /swapfile

6.使用以下命令激活 swap 文件:

sudo swapon /swapfile

用以下命令验证:

sudo swapon --show

 7.要让创建好的 swap 分区永久生效,可以将 swapfile 路径内容写入到 /etc/fstab 文件当中 :

sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

如果还是不行的话,可以考虑源码的方式安装。

安装后验证

以上就说明安装成功了。

 

关于一些问题 

用g++编译代码时会报错:

 这个问题大致是没有找到对应的库,我们可以确定我们的库文件放在哪里:
我这里的库文件是在

ll /usr/local/lib这个路径下的:

接着我们再执行:

echo $LIBRARY_PATH

 来查看当前搜索库的路径:
如果发现跟刚刚的目录不相符,比如:

那么就会出现刚刚上述的问题。

我们可以修改当前用户的~/.bashrc文件,在文件的末尾添加上:

export LIBRARY_PATH=/usr/local/lib:

 然后保存退出后,再执行:
 

source ~/.bashrc

此时再查看我们的库搜索路径

就发现已经修改了,然后再用g++编译就不会报错了

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型)

Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型) 目录 Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型) 1. 项目说明 2. 数据说明 (1)心跳信号分类预测数据集 3. 模型训练 (1)项目安装 &…

【Nginx】核心概念与安装配置解释

文章目录 1. 概述2. 核心概念2.1.Http服务器2.2.反向代理2.3. 负载均衡 3. 安装与配置3.1.安装3.2.配置文件解释3.2.1.全局配置块3.2.2.HTTP 配置块3.2.3.Server 块3.2.4.Location 块3.2.5.upstream3.2.6. mine.type文件 3.3.多虚拟主机配置 4. 总结 1. 概述 Nginx是我们常用的…

循环神经网络:从基础到应用的深度解析

🍛循环神经网络(RNN)概述 循环神经网络(Recurrent Neural Network, RNN)是一种能够处理时序数据或序列数据的深度学习模型。不同于传统的前馈神经网络,RNN具有内存单元,能够捕捉序列中前后信息…

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost) vcpkg的自动链接功能非常方便,但在某些情况下会出现过度链接的问题。 链接错误症状 以tinyxml2为例,程序中调用tinyxml2的函数后,若vcpkg中同时存在opencv和…

鸿蒙开发-HMS Kit能力集(应用内支付、推送服务)

1 应用内支付 开发步骤 步骤一:判断当前登录的华为账号所在服务地是否支持应用内支付 在使用应用内支付之前,您的应用需要向IAP Kit发送queryEnvironmentStatus请求,以此判断用户当前登录的华为帐号所在的服务地是否在IAP Kit支持结算的国…

IDEA敲Web前端快捷键

1.html基础格式 英文符号TAB键 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, mini…

字符串算法题

目录 题目一——14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 1.1.两两比较 1.2.统一比较 题目二——5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09; 2.1.中心拓展算法 题目三——67. 二进制求和 - 力扣&#xff08;LeetCode&#xff09; 题目…

嵌入式Linux - UBoot学习篇

目录 使用tftp上传我们的zImage 在Ubuntu上安装TFTP 把我们的网线连接到Ubuntu上 mmc指令 基本命令 2. 重新扫描和分区管理 3. 硬件分区 4. 启动配置 5. 复位功能和 DSR 配置 关键警告与注意事项&#xff1a; 常见用途&#xff1a; mmc info mmc rescan mmc list …

Ubuntu 20.04 Server版连接Wifi

前言 有时候没有网线口插网线或者摆放电脑位置不够时&#xff0c;需要用Wifi联网。以下记录Wifi联网过程。 环境&#xff1a;Ubuntu 20.04 Server版&#xff0c;无UI界面 以下操作均为root用户&#xff0c;如果是普通用户&#xff0c;请切换到root用户&#xff0c;或者在需要权…

亚马逊自研大语言模型 Olympus 即将亮相,或将在 LLM 竞赛中掀起新波澜

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

采用片上光学相控阵的激光雷达

激光雷达基础知识 LIDAR 基于众所周知的 RADAR 原理雷达是20世纪初就存在的著名技术激光雷达使用光频率而不是无线电波 激光雷达和雷达 使用相控阵的激光雷达通过干涉来提高方向性 激光雷达的输出剖面是阵列因子和单天线远场的乘积。 N &#xff1a;天线数量 k &#xff1a;…

阿里云服务器(centos7.6)部署前后端分离项目(MAC环境)

Jdk17安装部署 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/ 选择自己需要的jdk版本进行下载。 通过mac终端scp命令上传下载好的jdk17到服务器的/usr/local目录下 scp -r Downloads/jdk-17.0.13_linux-x64_bin.tar.gz 用户名服务器ip地址:/us…

SQL优化与性能——数据库设计优化

数据库设计优化是提高数据库性能、确保数据一致性和支持业务增长的关键环节。无论是大型企业应用还是小型项目&#xff0c;合理的数据库设计都能够显著提升系统性能、减少冗余数据、优化查询响应时间&#xff0c;并降低维护成本。本章将深入探讨数据库设计中的几个关键技术要点…

41 基于单片机的小车行走加温湿度检测系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采样DHT11温湿度传感器检测温湿度&#xff0c;滑动变阻器连接数码转换器模拟电量采集传感器&#xff0c; 电机采样L298N驱动&#xff0c;各项参数通过LCD1602显示&#x…

在VMware虚拟机上安装Kali Linux的详细教程(保姆级教程)

在VMware虚拟机上安装Kali Linux的详细教程 引言 Kali Linux是一个基于Debian的Linux发行版&#xff0c;专为渗透测试和安全审计而设计。它内置了数百种安全工具&#xff0c;广泛应用于网络安全领域。通过在VMware虚拟机上安装Kali Linux&#xff0c;您可以在不影响主操作系统…

30分钟学会正则表达式

正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成一个“规则字符串”&#xff0c;这个“规则字符串”用来表达对字符串的一种过滤逻辑。 作用 匹配 查看一个字符串是否符合正则表达式的语法 搜索 正…

spring-boot-maven-plugin 标红

情况&#xff1a;创建好 Spring Boot 项目后&#xff0c;pom.xml 文件中 spring-boot-maven-plugin 标红。 解决方案&#xff1a;加上 Spring Boot 的版本即可解决。

关于IDE的相关知识之三【插件安装、配置及推荐的意义】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于ide插件安装、配置及推荐意义的相关内容…

《通俗易懂 · JSqlParser 解析和构造SQL》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; 希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数&#xff0c;欢迎多多交流…

MySQL底层概述—7.优化原则及慢查询

大纲 1.Explain概述 2.Explain详解 3.索引优化数据准备 4.索引优化原则详解 5.慢查询设置与测试 6.慢查询SQL优化思路 1.Explain概述 使用Explain关键字可以模拟查询优化器来执行SQL查询语句&#xff0c;从而知道MySQL是如何处理SQL语句的&#xff0c;从而分析出查询语句…