protobuf的了解与使用

1.ProtoBuf: 是一套完整的 IDL(接口描述语言),出自Google,基于 C++ 进行的实现,开发人员可以根据 ProtoBuf 的语言规范生成多种编程语言(Golang、Python、Java 等)的接口代码

据说 ProtoBuf 所生成的二进制文件在存储效率上比 XML 高 3~10 倍,并且处理性能高 1~2 个数量级,这也是选择 ProtoBuf 作为序列化方案的一个重要因素之一。

RPC通信编解码库对比:json、flatbuf、protobuf、MessagePack_messagepack和protobuf对比-CSDN博客

2.使用

1)下载编译器

Releases · protocolbuffers/protobuf · GitHub
并配置系统环境路径

2)安装python库

pip install protobuf
3)定义对应的文件addressbook.proto

syntax = "proto3";  // 指定使用Protocol Buffers版本3(proto3)语法。// 定义一个名为Person的消息类型。
message Person {string name = 1;  // 字符串类型的字段,表示Person的名字,字段编号为1。int32 id = 2;     // 32位整数类型的字段,表示Person的ID,字段编号为2。string email = 3; // 字符串类型的字段,表示Person的电子邮件地址,字段编号为3。
}// 定义一个名为AddressBook的消息类型。
message AddressBook {repeated Person people = 1;  // 一个可重复的Person类型的字段,表示多个Person对象的列表,字段编号为1。
}

4)编译.proto文件

protoc --python_out=. addressbook.proto
5)使用生成的Python代码

import addressbook_pb2# 创建一个新的AddressBook
address_book = addressbook_pb2.AddressBook()# 添加一个Person
person = address_book.people.add()
person.name = "John Doe"
person.id = 1234
person.email = "johndoe@example.com"# 序列化AddressBook到二进制字符串
serialized_data = address_book.SerializeToString()# 打印序列化后的数据
print("Serialized data:", serialized_data)# 反序列化二进制字符串到新的AddressBook对象
new_address_book = addressbook_pb2.AddressBook()
new_address_book.ParseFromString(serialized_data)# 打印反序列化后的数据
for person in new_address_book.people:print("Name:", person.name)print("ID:", person.id)print("Email:", person.email)

得到结果

Serialized data: b'\n\x0e\n\x07John Doe\x10\xd2\x09\x1a\x10johndoe@example.com'
Name: John Doe
ID: 1234
Email: johndoe@example.com
 

Protobuf协议初级详解(python使用)从安装到序列化-反序列化_python protobuf-CSDN博客

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

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

相关文章

Java技术栈中的核心组件:Spring框架的魔力

Java作为一门成熟的编程语言,其生态系统拥有众多强大的组件和框架,其中Spring框架无疑是Java技术栈中最闪耀的明星之一。Spring框架为Java开发者提供了一套全面的编程和配置模型,极大地简化了企业级应用的开发流程。本文将探讨Spring框架的核…

python | pyg2plot,一个有趣的 数据可视化 Python 库!

本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。 原文链接:pyg2plot,一个有趣的 Python 库! 大家好,今天为大家分享一个有趣的 Python 库 - pyg2plot。 Github地址:h…

打破数据分析壁垒:SPSS复习必备(八)

一、假设检验-基本概念 对总体提出一假设,然后借助样本对该假设进行检验。 原假设 H0: 在统计学中,把需要通过样本去推断正确与否的命题,称为原假设,又称零假设.它常常是根据已有资料或经过周密考虑后确定的. 备择假设H1: 与原假设对立的假设. 显著性水平(signi…

兰州市红古区市场监管管理局调研食家巷品牌,关注细节,推动进步

近日,兰州市红古区市场监管管理局临平凉西北绿源电子商务有限公司进行了深入视察,为企业发展带来了关怀与指导。 食家巷品牌作为平凉地区特色美食的代表之一,一直以来凭借其纯手工工艺和独特的风味,在市场上占据了一席之地。领导…

Linux常用环境变量PATH

Linux常用环境变量 一、常用的默认的shell环境变量二、环境变量 PATH三、持久化修改环境变量四、常用的环境变量 一、常用的默认的shell环境变量 1、当我们在shell命令行属于一个命令,shell解释器去解释这个命令的时候,需要先找到这个命令. 找到命令有两…

统信UOS上鼠标右键菜单中添加自定义内容

原文链接:统信UOS上鼠标右键菜单中添加自定义内容 Hello,大家好啊!今天给大家带来一篇关于在统信UOS桌面操作系统上鼠标右键菜单中添加自定义内容的文章。通过自定义鼠标右键菜单,可以大大提升日常操作的效率和便捷性。本文将详细…

面向对象修炼手册(四)(多态与空间分配)(Java宝典)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀面向对象修炼手册 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 1 多态 1.1 多态的形式&…

节省一个小目标,电手官方一键「傻瓜式」重装系统

大伙儿下午好,这是一篇负收益的广子。 没错,电手上线了重装 Windows 系统的工具类软件。 和我们顶头老大傲梅分区助手一样,不含捆绑,上手简单,完全免费,用爱发电。 众所周知,微软对于系统的更…

韩顺平0基础学java——第30天

p600-611 坦克大战! 艰难推进中 坦克大战-子弹 发射子弹 1.当发射一颗子弹后,就相当于启动一个线程 2.玩家拥有子弹对象,当按下J时,就启动发射行为(线程),让子弹不停移动,形成…

最新!计算机类SCI期刊全名单!你想发的顶刊都在这里

【SciencePub学术】近日,2023JCR正式发布,最受瞩目就是各类期刊的最新影响因子排名,本期,小编对计算机类的期刊做了一个整理,供计算机方向的研究学者们参考! 来源:WOS数据库官网 完整名单 ※ 本…

离线安装docker-v26.1.4,compose-v2.27.0

目录 ​编辑 1.我给大家准备好了提取即可 2.安装docker和compose 3.解压 4.切换目录 5.执行脚本 6.卸载docker和compose 7.执行命令 “如果您在解决类似问题时也遇到了困难,希望我的经验分享对您有所帮助。如果您有任何疑问或者想分享您的经历,…

004 插入排序(lua)

文章目录 123 1 -- Lua中没有类和方法的概念,所以我们将所有功能都写在一个脚本中 -- 交换数组中两个元素的功能 local function swap(arr, i, j) local temp arr[i] arr[i] arr[j] arr[j] temp end -- 插入排序算法的实现 local function insertionS…

投屏软件免费版有没有?十款好用的手机投屏软件(2024更新)

“我想将手机免费投屏到电脑上,但是不知道怎么操作?有哪些图片软件免费版可以帮我解决这个问题吗?”在互联网时代,投屏软件的应用越来越广泛,使我们能够方便地将手机、平板等设备的内容投射到更大的屏幕上,…

Linux 网络:网卡 promiscuous 模式疑云

文章目录 1. 前言2. 问题场景3. 问题定位和分析4. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 问题场景 调试 Marvell 88E6320 时,发现 eth0 出人意料的进入了 promis…

在Ubuntu上安装Python3

安装 python3 pip sudo apt -y install python3 python3-pip升级 pip python3 -m pip install --upgrade pip验证查看版本 python3 --version

LabVIEW技术交流-控件的禁用属性与Mouse Up事件的一个坑

问题来源 我们平时对控件Mouse Up事件触发使用场景不多,可能在按钮控件上会偶尔用到。在一些场景中,我们用按钮的Mouse Up触发事件,但是又希望在某些限制条件下,按钮会被禁用而不能触发事件。 可是当我们禁用按钮时,它…

【CSS】深入浅出CSS渐变

CSS渐变是一种非常有用的功能,它允许你在两个或多个颜色之间创建平滑的过渡效果。这种效果在网页设计中非常常见,用于背景、边框、文本颜色等。下面我们将深入浅出地介绍CSS渐变。 1. 线性渐变(Linear Gradients) 线性渐变是一种…

pwdLockUtil

通常是一个用于管理和处理与用户密码锁定相关操作的工具类,在一些系统中,为了增加安全性,可能会对多次登录失败的用户账户进行锁定,防止暴力破解攻击; 1. 主要功能 一个典型的 PwdLockUtil 工具类可能包括以下功能: 记录失败尝试次数:当用户登录失败时…

第三十一篇——大数据1:从四个特征把握大数据的本质

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 大数据的特征,如果我们没有一个清晰的边界以及明确的定位&…

python holidays获取中国节日

在Python中,holidays库是一个流行的库,用于处理各种国家和地区的公共假期。然而,需要注意的是,截至2024年,holidays库的官方版本可能并不直接支持中国的所有节日。不过,我们可以通过扩展或自定义该类库来添…