Protobuf库的使用

news2024/9/20 9:40:17

文章目录

  • Protobuf是什么
  • Protobuf使⽤流程介绍
  • ProtoBuf的使用
    • 创建.proto⽂件
    • 指定proto3语法
    • package声明符
    • 定义消息(message)
    • 编译contacts.proto⽂件命令如下:
    • 序列化与反序列化的使⽤

Protobuf是什么

ProtoBuf(全称ProtocolBuffer)是数据结构序列化和反序列化框架,它具有以下特点:

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

Protobuf使⽤流程介绍

在这里插入图片描述

ProtoBuf的使用

创建.proto⽂件

.proto⽂件规范

在这里插入图片描述

指定proto3语法

在这里插入图片描述

package声明符

在这里插入图片描述

定义消息(message)

消息(message):要定义的结构化对象,我们可以给这个结构化对象中定义其对应的属性内容。在⽹络传输中,我们需要为传输双⽅定制协议。定制协议说⽩了就是定义结构体或者结构化数据,⽐如,tcp,udp报⽂就是结构化的。再⽐如将数据持久化存储到数据库时,会将⼀系列元数据统⼀⽤对象组织起来,再进⾏存储。ProtoBuf就是以message的⽅式来⽀持我们定制协议字段,后期帮助我们形成类和⽅法来使⽤。

为contacts.proto(通讯录demo)新增联系⼈message

在这里插入图片描述

定义消息字段

在message中我们可以定义其属性字段,字段定义格式为:字段类型 字段名 = 字段唯⼀编号;
• 字段名称命名规范:全⼩写字⺟,多个字⺟之间⽤_连接。
• 字段类型分为:标量数据类型和特殊类型(包括枚举、其他消息类型等)。
• 字段唯⼀编号:⽤来标识字段,⼀旦开始使⽤就不能够再改变。

该表格展⽰了定义于消息体中的标量数据类型,以及编译.proto⽂件之后⾃动⽣成的类中与之对应的字段类型。在这⾥展⽰了与C++语⾔对应的类型。

在这里插入图片描述
2e3f6ceb4be0a0ed7282b206579a.png)
在这里插入图片描述
注意:

在这里插入图片描述

编译contacts.proto⽂件命令如下:

protoc --cpp_out=. contacts.proto

编译contacts.proto⽂件后,会⽣成所选择语⾔的代码,我们选择的是C++,所以编译后⽣成了两个
⽂件: contacts.pb.h contacts.pb.cc 。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

序列化与反序列化的使⽤

创建main.cc进行测试:

在这里插入图片描述
在这里插入图片描述
注意: -lprotobuf:链接protobuf库⽂件

由于ProtoBuf是把联系⼈对象序列化成了⼆进制序列,这⾥⽤string来作为接收⼆进制序列的容器。所以在终端打印的时候会有换⾏等⼀些乱码显⽰。另外相对于xml和JSON来说,因为PB被编码成⼆进制,破解成本增⼤,ProtoBuf编码是相对安全的。

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

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

相关文章

数字 FPV 革命 – DJI、Leadcore 和 Artosyn 的三角关系。

人们对 DJI、Caddx FPV 以及 HDZero 等公司最近推出的数字 FPV 系统的起源进行了大量的猜测和推测。随着 Avatar 系统的发布,也有许多人认为它要么使用与 DJI 相同的芯片组,要么是复制品或克隆品。在本文中,我将尝试揭开这一切的神秘面纱&…

python spider novel

python msedgedriver 获取小说 声明:只为学习/练习技术 from lxml import etree from selenium import webdriver from selenium.webdriver.edge.service import Service from selenium.webdriver.edge.options import Optionsimport time# 初始化EdgeOptions, 以…

【系统规划与管理师】【案例分析】【考点】【答案篇】第4章 IT服务规划设计

【问题篇】☞【系统规划与管理师】【案例分析】【考点】【问题篇】第4章 IT服务规划设计 【移动端浏览】☞【系统规划与管理师】【案例分析】【模拟考题】章节考题汇总(第4章)(答案篇)(共38个知识点) 第4章…

《数字信号处理》学习05-单位冲击响应与系统响应

目录 一,单位冲激响应 二,LTI系统对任意序列的系统响应 三,LTI系统的性质 通过上一篇文章《数字信号处理》学习04-离散时间系统中的线性时不变系统-CSDN博客的学习,我已经知道了离散时间线性时不变系统(LTI&#x…

基于 jenkins 的持续测试方案

CI/CD Continuous Integration; Continuous Deployment; 持续集成,将新代码和旧代码一起打包、构建;持续部署,将新构建的包进行部署;持续测试,将新代码、新单元测试一起测试;方案: 公有云DevO…

Python 控制Chrome浏览器使用Selenium4操作点击百度搜索

前面我们讲到如何安装Selenium和ChromeDriver来驱动打开网页,现在我们有一个目的就是使用python来控制chrome浏览器打开百度并搜索 直接先上调试好的代码 from time import sleepfrom selenium import webdriver from selenium.webdriver.common.keys import Keys from selen…

2-88 基于matlab的四叉树加权聚焦多聚焦图像融合

基于matlab的四叉树加权聚焦多聚焦图像融合,的四叉树分解策略将源图像被分解成四叉树结构中具有最佳尺寸的块。在这个树形结构中,使用一种新的加权焦点测量方法(名为加权修正拉普拉斯之和)来检测焦点区域。可以很好地从源图像中提…

1934. 数字游戏(number)

代码 #include<bits/stdc.h> using namespace std; int main() {int ans0,i;string s;cin>>s;for(i0;i<7;i)if(s[i]1)ans;cout<<ans;return 0; } 记得点赞关注收藏&#xff01;&#xff01;&#xff01;谢谢&#xff01;&#xff01;&#xff01;

基于huffman树的文件压缩项目以及相关测试

前言 项目采用Huffman编码的方式进行文件压缩与解压缩。主要原理是通过Huffman编码来表示字符&#xff0c;出现次数多的编码短&#xff0c;出现次数少的编码长&#xff0c;这样整体而言&#xff0c;所需要的bit位是减少的&#xff0c;就实现了文件压缩功能。读取文件中的字符出…

基于大语言模型智能体的自主机器学习

文章介绍了MLR-Copilot框架&#xff0c;这是一种利用大型语言模型&#xff08;LLMs&#xff09;来自动化机器学习研究中创意生成、实验设计和实施过程的方法。该框架分为三个阶段&#xff1a; 首先通过阅读现有研究文献&#xff0c;使用LLM驱动的IdeaAgent来生成研究假设和实验…

PADS Router 入门基础教程(一)

有将近三周没有更新过博客了&#xff0c;最近在整理PADS Router 入门基础教程&#xff0c;希望喜欢本系列教程的小伙伴可以点点关注和订阅&#xff01;下面我们开始进入PADS Router课程的介绍。 一、PADS Router 快捷键 ​ 二、课程介绍 本教程主要介绍&#xff1a;PADS Rou…

电脑安装Winserver2016无法安装网卡驱动(解决办法)

因为工作原因&#xff0c;需要找一台PC机作为服务器去测试软件性能问题&#xff0c;故需要在PC机上安装网卡驱动。 电脑品牌&#xff1a;联想 型号&#xff1a;天逸510Pro-18ICB 操作系统&#xff1a;WindowsServer2016&#xff08;桌面版&#xff09; 问题&#xff1a;系统…

连接池-druid

原因&#xff1a;通过jdbc 创建Connection时比较耗费资源和时间&#xff0c;如果程序每次执行数据库操作都自己创建连接&#xff0c;项目不好控制连接数量&#xff0c;另外程序执行相对耗时。 市面上有很多厂商有连接池组件&#xff0c;目前比较出名的是alibaba druid 以及 Hi…

828华为云征文|华为Flexus云服务器快速上手实例安装“运维搭子”

⭐ 引言 华为云Flexus X实例简介 在现代云计算的世界里&#xff0c;资源的灵活性和性能至关重要。华为云Flexus X实例正是为满足这一需求而诞生的&#xff0c;它代表了云服务器技术的新高度 &#x1f310;&#x1f680;。 华为云Flexus X实例采用了领先的擎天QingTian架构&a…

计算机毕业设计 沉浸式戏曲文化体验系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

深入探索嵌入式 Linux

摘要&#xff1a;本文深入探究嵌入式 Linux。首先回顾其发展历程&#xff0c;从早期尝试到克服诸多困难逐渐成熟。接着阐述其体系结构&#xff0c;涵盖硬件、内核、文件系统和应用层。开发环境方面包括交叉编译工具链、调试工具和集成开发环境。在应用领域&#xff0c;广泛应用…

uniapp设置微信小程序的交互反馈

链接&#xff1a;uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗&#xff1a; title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon&#xff1a;error是设置我们失败的logo 设置的文字上…

探探我对加密算法的认识

密码学基本认知 为什么需要加密算法&#xff0c;如果不加密可能导致哪些问题&#xff1f; 如果对传输的数据不使用加密算法&#xff0c;所有的数据在传输过程中都是明文传输的&#xff0c;那么会出现以下三种问题&#xff1a; 1&#xff09;泄露问题&#xff1a;如果在网络中…

大美祖国之地名篇-探寻全国同名地名

目录 前言 一、地名数据库 1、数据库模型 2、数据表结构 二、实践之旅&#xff0c;发现同名地名 1、省、市同名 2、市、县同名 3、 区县、乡镇同名 4、乡镇和村委会同名 三、总结 前言 我们祖国地大物博&#xff0c;从北到南&#xff0c;从东到西。祖国位于亚洲东部&…

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失&#xff0c;在SigLIP这个工作中&#xff0c;作者提出采用非对比性的sigmoid损失&#xff0c;能够更高效地进行图文预训练&#xff0c;本文进行…