python中读写Protobuf总结

article/2025/8/30 6:39:54

Protobuf是谷歌开源的协议框架,以高效传输著称并且支持多种语言。工作中也用到了,在此做个总结。

  1. Protobuf运行原理

下面一张图可以说明:

  1. Python中使用Protobuf

2.1安装protoc程序

protoc --version

我安装的是3.6.1版本

2.2定义协议

syntax = "proto3";
package com.union.fun;message Metric {string name = 1;string type = 2;float value = 3;repeated string tags = 4;}

2.3生成接口

//Python接口生成
protobuf/bin/protoc  -I=/home/tiger/python  --python_out=/home/tiger/python  metric.proto//另外java和C++生成方式如下
//Java接口生成
protobuf/bin/protoc  -I=/home/tiger/python  --java_out=/home/tiger/python  metric.proto//C++接口生成
protobuf/bin/protoc  -I=/home/tiger/python  --cpp_out=/home/tiger/python metric.proto

2.4读写调用

(1)单个对象

import metric_pb2def writepb():my_metric = metric_pb2.Metric()my_metric.name = 'sys.cpu'my_metric.type = 'gauge'my_metric.value = 99.9my_metric.tags.extend(['my_tag', 'foo:bar'])with open('out.bin', 'wb') as f:f.write(my_metric.SerializeToString())def readpb():with open('out.bin', 'rb') as f:read_metric = metric_pb2.Metric()read_metric.ParseFromString(f.read())print(read_metric)# do something with read_metricif __name__ == "__main__":writepb()readpb()

运行结果如下:python3 method1.py

(2)连续多个对象

import metric_pb2
from google.protobuf.internal.encoder import _VarintBytes
from google.protobuf.internal.decoder import _DecodeVarint32
import randomdef writepb():with open('out.bin', 'wb') as f:my_tags = ("my_tag", "foo:bar")for i in range(128):my_metric = metric_pb2.Metric()my_metric.name = 'sys.cpu'my_metric.type = 'gauge'my_metric.value = round(random.random(), 2)my_metric.tags.extend(my_tags)size = my_metric.ByteSize()f.write(_VarintBytes(size))f.write(my_metric.SerializeToString())def readpb():with open('out.bin', 'rb') as f:buf = f.read()n = 0while n < len(buf):msg_len, new_pos = _DecodeVarint32(buf, n)n = new_posmsg_buf = buf[n:n+msg_len]n += msg_lenread_metric = metric_pb2.Metric()read_metric.ParseFromString(msg_buf)print(read_metric)# do something with read_metricif __name__ == "__main__":writepb()readpb()

运行结果如下:python3 method2.py

参考文档如下:

https://www.datadoghq.com/blog/engineering/protobuf-parsing-in-python/


http://chatgpt.dhexx.cn/article/ndyDwvvh.shtml

相关文章

protobuf 入门

参考自 https://juejin.cn/post/7029961388411846664 介绍了protobuf基本概念、优缺点、与protobuf在C上的基本使用 1. 什么是protobuf 它是一个灵活、高效、结构化的序列化数据结构&#xff0c;它与传统的XML、JSON等相比&#xff0c;它更小、更快、更简单。 ProtoBuf是由…

protobuf语法详解

文章目录 一、包&#xff08;package&#xff09;二、选项&#xff08;option&#xff09;三、消息类型&#xff08;message&#xff09;3.1、常规消息类型3.1.1、字段修饰符3.1.2、字段类型3.1.2.1、标量类型3.1.2.2、枚举类型3.1.2.3、Any类型3.1.2.4、oneof类型3.1.2.5、map…

ProtoBuf在中C++使用介绍

ProtoBuf 我们先来看看官方文档给出的定义和描述&#xff1a; protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法&#xff0c;它可用于&#xff08;数据&#xff09;通信协议、数据存储等。 Protocol Buffers 是一种灵活&#xff0c;高效&#xff0c;自…

linux 安装protobuf

从github&#xff1a;https://github.com/protocolbuffers/protobuf 下载源代码 1、根据protobuf GitHub的README.md安装protoBuf &#xff08;1&#xff09;安装依赖工具 sudo apt-get install autoconf automake libtool curl make g unzip&#xff08;2&#xff09;在prot…

protobuf-master :编译篇

protobuf的编译其实相对简单&#xff0c;这里搬一下protobuf的ReadMe就很清楚了~ 如果是平时接触开源项目无从下手的小伙伴&#xff0c;也建议从阅读ReadMe开始哦! This directory contains CMake files that can be used to build protobuf with MSVC on Windows. You can bui…

ProtoBuf编码原理

背景 Protobuf是我们在网络传输中经常会用到的协议&#xff0c;优点是版本间兼容性强&#xff0c;对数据序列化时的极致压缩使得Protobuf包体积比xml、json等格式要小很多&#xff0c;节约流量。对于pb协议的具体使用方法&#xff0c;其官网有比较详细的说明&#xff0c;本文不…

windows protobuf编译

protobuf编译 Protobuf下载地址&#xff1a;https://github.com/protocolbuffers/protobuf/releases 1、配置cmake: 2、点击生成&#xff0c;打开工程文件&#xff1a;略 3、编译protobuf: 4、安装完成展示&#xff1a; 测试&#xff1a; 1、创建在bin目录下创建build.bat…

【Protobuf】Protobuf协议

Protobuf协议 什么是Protobuf一、编写proto文件二、生成协议类三、编码解码3.1 编码方法3.2 解码方法 什么是Protobuf Protobuf是谷歌发布的一套协议格式&#xff0c;它规定了一系列编码和解码方法。 目前&#xff0c;网上已经有不少实现Protobuf编码解码的库&#xff0c;可以…

protobuf简介

文章目录 一、protobuf的定义二、protobuf的优缺点2.1、优点2.2、缺点 三、protobuf的使用流程3.1、protobuf在Linux下的安装过程3.2、定义proto文件3.3、protoc编译器3.4、调用接口进行序列化、反序列化 四、protobuf的应用场景五、protobuf与json和XML的对比 一、protobuf的定…

java中使用protobuf总结

基本没怎么接触过java编程&#xff0c;别的团队发过来一个用java编写的存储pb的文件&#xff0c;让拆分和解析&#xff0c;硬着头皮做一下&#xff0c;在此将步骤做个记录&#xff1a; 下载安装protobuf https://github.com/protocolbuffers/protobuf/tags?afterv3.6.1.2 编译…

protobuf 详解

protobuf简介 Protobuf是Protocol Buffers的简称&#xff0c;它是Google公司开发的一种数据描述语言&#xff0c;是一种轻便高效的结构化数据存储格式&#xff0c;可以用于结构化数据串行化&#xff0c;或者说序列化 。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议…

protobuf介绍和语法

目录 前言 语法 标识符 字段 字段类型 proto2和proto3区别 前言 Protobuf即Protocol Buffers&#xff0c;是Google公司开发的一种跨语言和平台的序列化数据结构的方式&#xff0c;是一个灵活的、高效的用于序列化数据的协议。 与XML和JSON格式相比&#xff0c;pr…

Protobuf:一种更小、更快、更高效的协议

C/CLinux服务器开发/后台架构师知识体系 Protobuf介绍 Protobuf (Protocol Buffers) 是谷歌开发的一款无关平台&#xff0c;无关语言&#xff0c;可扩展&#xff0c;轻量级高效的序列化结构的数据格式&#xff0c;用于将自定义数据结构序列化成字节流&#xff0c;和将字节流反…

win10商店打不开_win10应用商店闪退是咋回事呢

win10虽然具有闪电般的开机速度&#xff0c;并且还新增了很多功能。但比较是全新的操作系统&#xff0c;所以难免会存在一些故障&#xff0c;这里小编就给大家讲讲win10应用商店闪退打不开怎么解决。 方法一 1&#xff0c;首先&#xff0c;打开开始菜单&#xff0c;进入设置&am…

电脑安装Linux闪退,win10系统运行内置Linux系统闪退如何处理

我们在win10系统电脑的使用中&#xff0c;有小伙伴在Linux系统的使用中出现了问题&#xff0c; win10系统运行内置Linux系统闪退的情况出现了&#xff0c;这是什么原因导致的呢&#xff0c;我们在win10系统运行内置Linux系统闪退如何处理&#xff0c;今天小编就来跟大家分享一下…

Java版mc闪退_本文传授win10运行mc闪退的具体操作对策

我们在使用电脑的时候遇到了win10运行mc闪退问题确实比较难受&#xff0c;要是你的电脑技术没有达到一定的水平&#xff0c;可能就不能解决这个win10运行mc闪退的情况。我们应当如何处理这个问题呢&#xff1f;小编先给大伙说说简单的措施&#xff1a;1、确保电脑中安装了 .NET…

(2022.5.27)【Win10】Windows10重置后微软商店闪退打不开、图片闪退打不开、UWP应用闪退打不开——可能的解决方案

更新日志 20220609 增加注意事项 注意事项 经过多为网友的反馈&#xff0c;目前这个方法是无法直接解决微软商店打不开的问题。因此&#xff0c;基于我目前的了解&#xff08;6月9日&#xff09;&#xff0c;如果大家遇到这个问题&#xff0c;真的只能重新 U 盘安装系统了。…

win10内置计算机和天气闪退,win10系统中天气闪退怎么办?Win10天气应用闪退问题解决方法...

win10系统中天气闪退怎么办&#xff1f;最近有部分用户在安装了win10系统后发现自带的天气应用出现闪退的情况&#xff0c;点击天气应用&#xff0c;发现它启动了很久&#xff0c;然后就自动关闭了。之后再点击天气应用就闪退&#xff0c;打不开。而尝试打开别的应用却可以正常…

解决WIN10下应用商店不能用,闪退的情况

解决WIN10下应用商店不能用,闪退的情况 先说下我的情况,也是博主手贱,经常看PC上的某个文件或者程序不顺眼的话就会想办法把它干掉,为此重装过几次系统… 这一次是装了win10的周年更新后,烦人的cortana,onedrive等一些我不想要的APP又回来了,在暴力清理这些APP的时候,需要特殊…

win10java闪退怎么办_Win10应用打不开或闪退怎么办?解决方案在此

可能有一些用户升级Win10之后遇到了应用商店、应用打不开或闪退的问题&#xff0c;此时可尝试通过下面的一些方法来解决。 1、点击任务栏的搜索(Cortana小娜)图标&#xff0c;输入Powershell&#xff0c;在搜索结果中右键单击Powershell&#xff0c;选择“以管理员身份运行”。…