Protobuf 安装及 Python、C# 使用示例!

C#使用ProtoBuf 1. Google ProtoBuf 经过测试,protobuf比json存储效率还是要高,即时号称最快的fastjson也没有protobuf快,这里为了使用 c#做一个客户端兼容,所以也需要使用protobuf。 2.准备工作 Visual Studio 2017 NuGet安装:Google.Protobuf、Google.Protobuf.Tools 根据协议设计并编写.proto文件 3. 使用步骤 3.1 安装Google.Protobuf和Google.Protobuf.Tools. 阅读详情

Protobuf(Protocol Buffers),是 Google 开发的一种跨语言、跨平台的可扩展机制,用于序列化结构化数据。

与 XML 和 JSON 格式相比,protobuf 更小、更快、更便捷。protobuf 目前支持 C++、Java、Python、Objective-C,如果使用 proto3,还支持 C#、Ruby、Go、PHP、JavaScript 等语言。

Python资源共享群:626017123

官网地址: developers.google.cn/protocol-bu…

GitHub 地址: github.com/protocolbuf…

优点:

  • 性能好
  • 跨语言

缺点:

  • 二进制格式可读性差:为了提高性能,protobuf 采用了二进制格式进行编码,这直接导致了可读性差。
  • 缺乏自描述:XML 是自描述的,而 protobuf 不是,不配合定义的结构体是看不出来什么作用的。

02| 安装

2.1 Windows 下安装

下载地址: github.com/protocolbuf…

下载 protoc-3.9.1-win64.zip,这个是编译后的压缩包,相当于绿色版,解压后,将其下的 bin 目录添加到环境变量就可以了,省去了安装的麻烦。

 

 

 

 

 

然后打开命令提示符,输入命令:

protoc --version
复制代码

成功显示版本号,则表示安装成功。如下图:

 

 

 

 

 

03| 简单使用

3.1 编译

使用 protobuf 首先需要定义 .proto 文件,先来看一个简单的例子。

定义 Person.proto 文件,内容如下:

syntax = "proto3";
package Test;
message Person {
  string Name = 1;
  int32 Age = 2;
  bool Marriage = 3;
}
复制代码
  • syntax = "proto3"; 指定正在使用 proto3 语法,否则 protobuf 将默认使用的是 proto2。
  • package Test; 指定命名空间(C# 中)。
  • message 是关键字,定义结构化数据。
  • 等号后面的数字是字段唯一编号( 注意不是字段的值 ),用于二进制格式消息中标识字段。

protoc 是 protobuf 自带的编译器,可以将 .proto 文件编译成 java、python、go、C# 等多种语言的代码,直接引用。

编译命令:

protoc -I=E:\GL\Test2017 --python_out=E:\GL\Test2017 Person.proto
复制代码

编译命令说明:

  • -I 表示源文件(.proto 文件)所在文件夹路径。
  • --python_out 表示目标语言为 python,且指定生成的 .py 文件存放目录。相应的,C# 为 csharp_out,
  • Person.proto 为源文件文件名,如果有多个,空格隔开。

3.2 Python 示例

安装 protobuf 。

调用编译命令编译 Person.proto,编译后生成文件: Person_pb2.py ,添加至项目中,序列化和反序列化示例如下:

import Person_pb2
person = Person_pb2.Person()
person.Name = '张三'
person.Age = 20
person.Marriage = True
# 序列化
b = person.SerializeToString()
print(b)
# 反序列化
p = Person_pb2.Person()
p.ParseFromString(b)
print(f'Name: {p.Name}; Age: {p.Age}; Marriage: {p.Marriage}')
复制代码

输出:

b'\n\x06\xe5\xbc\xa0\xe4\xb8\x89\x10\x14\x18\x01'
Name: 张三; Age: 20; Marriage: True
复制代码

注意,不能这样写,这是错误的:

p = Person_pb2.Person().ParseFromString(b)
复制代码

3.3 C# 示例

C# 下的 Protobuf 有 3 个版本:

  • Google.ProtoBuf:Google官方版本, github.com/google/prot…
  • protobuf-net:.net 社区版本,由 .net 社区爱好者开发, github.com/mgravell/pr…
  • Google.ProtocolBuffers:据说是由谷歌的 .net 员工在官方版本还未出来的时候开发的, github.com/jskeet/prot…

这里我们介绍谷歌官方版本。

在 VS 中,通过 NuGet 安装 'google.protobuf' 包。

using Google.Protobuf;
using System;
using Test;
namespace Protobuf
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();
            person.Name = "张三";
            person.Age = 20;
            person.Marriage = true;
            // 序列化
            byte[] buffer = person.ToByteArray();
            foreach (byte b in buffer)
            {
                Console.Write(b.ToString("X2") + " ");
            }
            Console.WriteLine();
            // 反序列化
            Person p = Person.Parser.ParseFrom(buffer);
            Console.WriteLine(string.Format("Name: {0}, Age: {1}, Marriage: {2}", p.Name, p.Age, p.Marriage));
            Console.Read();
        }
    }
}
复制代码

输出:

0A 06 E5 BC A0 E4 B8 89 10 14 18 01
Name: 张三, Age: 20, Marriage: True
复制代码

比较一下 Python 的输出,好像不一样,Python 中第一个字节是 \n,而这里是 0A。\n 在 ASCII 中的值就是 0A。所以两种语言的序列化结果是一样的。

C/C++编程:Protobuf 使用 概述 前言 在移动互联网时代,手机流量、电量时最为有限的资源,而移动端的即使通讯应用无疑必须的直面这两点 解决流量过大的基本方法是使用高度压缩的通信协议,而数据压缩后流量减少带来的自然结果也就是省电:因为大数据量传输必然需要更久的网络操作、、数据序列化及反序列化操作,这些都是电量消耗过快的根源。 当前即时通讯应用中最热门的通信协议无疑就是Google的Protobuf了,相比于它的前辈xml、json,它的体量更小,解析速度更快,所以在 IM 这种通信应用中,非常适合将 Protobuf 作为数据传输格式 阅读详情

相关推荐

python中protobuf和json互相转换应用

python中protobuf和json互相转换

hsy12342611的专栏 5432

C#使用protobuf

编译依赖 首先,创建一个C#4.5以上project,因为最新的protobuf依赖于C#5.0的语言特性。 然后,我们通过nuget,为项目添加对protobuf的引用,搜索protobuf就可以开始安装了。 编辑.proto文件,生成序列化文件 例子: syntax = "proto3"; message pb_user_info { string user_id = 1; string leader_id = 2; repeated string members = 3;

AI的博客 7064

Protobuf && protobuf-c

Protobuf(Protocol Buffers)是Google开发的高效二进制数据序列化工具,具有体积小、速度快、跨平台等优势。相比JSON/XML,Protobuf采用二进制编码,数据体积可缩小3-10倍,序列化速度更快,并支持强类型检查和多语言支持。其核心包括.proto定义文件、protoc编译器和各语言运行时库。典型应用包括gRPC通信、微服务数据传输等场景。虽然需要预定义Schema且调试不便,但在性能敏感场景优势明显。示例展示了从定义proto文件到生成代码、序列化/反序列化的完整流程,并提

hqyj15121的博客 603

C#中protobuf-net的编码结构及使用方法

C#中protobuf-net的编码结构及使用方法 protobuf-net简介 ProtoBuf编码原理 编码结构 解析一个编码结果 使用方法 参考资料

jayer的博客 3431

C#里使用protobuf的简单的例子

由于这里是采用Win11,所以下载这个文件:protoc-28.2-win64.zip。可以从这里下载到相关的源码,然后再下载它的协议编译器protoc.exe文件,在这里直接使用protobuf的项目源码的方式:Google.Protobuf。有了这个文件,就可以添加到项目里,不过项目里要添加protobuf引用。通过上面的学习,就基本上可以进入protobuf的门路了。在这里打包,就会生成一个out_bin.dat的文件。其它更加复杂,高级的功能就要自己去领会了。再添加它的签名键:keys。

大坡3D软件开发 1547

Protobuf:python版使用

protobuf是Google公司提出的一种轻便高效的结构化数据存储格式,常用于结构化数据的序列化,具有语言无关、平台无关、可扩展性特性,常用于通讯协议、服务端数据交换、**数据存储**等场景

满腹的小不甘 2106

Protobuf 安装及 Python、C# 使用示例

介绍了 Protobuf 及 Windows 下的安装,Python、C# 中的使用。

guliang21的专栏 637

变色龙哈希函数 Chameleon Hash 可变型区块链

哈希函数 Hash: 众所周知,区块链有着极其优秀的安全性就是因为其充分使用了哈希函数。 哈希简单用一句话来讲,就是:将任意长度输入的字串可转换成一个固定长度的字串,通过原始字串可以很容易地算出转换后的字串,通过转换后的字串很难还原出原始字串。 哈希函数特征: 1. 对于任意m作为输入,得到输出的结果,很难找到另一个输入m'  (m'不等于m),使得m'的Hash结果也为同样的输出

新手村 1万+

Protobuf 安装及 Python、C# 示例

01| 简介02| 安装2.1 Windows 下安装03| 简单使用3.1 编译3.2 Python 示例3.3 C# 示例 01| 简介 Protobuf(Protocol Buffers),是 Google 开发的一种跨语言、跨平台的可扩展机制,用于序列化结构化数据。 与 XML 和 JSON 格式相比,protobuf 更小、更快、更便捷。protobuf 目前支持 C++、Java、...

guliang21的专栏 133

PaddleOCR实战:从零开始训练自己的OCR模型(附完整代码与数据集处理技巧)

本文提供了一份详尽的PaddleOCR实战指南,手把手教你从零开始训练专属的OCR模型。内容涵盖高质量训练数据的准备与标注技巧、预训练模型的选型对比、关键参数调优策略,并附有完整的代码示例。通过遵循本文的步骤,开发者可以高效构建并优化贴合自身业务场景的高精度OCR模型,实现从数据到部署的全流程掌握。

weixin_29263201的博客 571

基于知识图谱的职位推荐系统的设计与实现

在职位推荐系统中,实体可以包括职位、公司、技能等,而关系可以包括职位与公司的关联、职位与技能的关联等。基于知识图谱的职位推荐系统可以提供更加智能和精确的职位推荐服务。通过收集和预处理数据构建知识图谱,并设计推荐算法和用户界面,可以实现一个完整的职位推荐系统。通过利用知识图谱技术,我们可以构建一个更加智能和精确的职位推荐系统。本文将介绍如何设计和实现基于知识图谱的职位推荐系统,并提供相应的源代码。通过定义实体和关系的节点和边,可以将数据存储在图数据库中,并建立它们之间的关系。

RiqaEditor的博客 1669

【Unity】安装配置Python使用protobuf转换Excel表格数据并在unit中使用

前言:        之前使用NPOI插件编写的导表工具,其实就是直接将数据进行序列化,解析时还需要进行反序列化,步骤比较繁复,最近看到Google的一个开源的项目protobuf,不仅可以用于进行excel表格数据的导出,还能直接用于网络通信协议的定制。一、protobuf简介:        protobuf是由google公司发布的一个开源的项目,是一款方便而又通用的数据传输协议。所以我们在

天生爱赞美的博客 6358

Marin说PCB之LPDDR5的布线注意事项--03

这个规则中是把每个字节中的WCK to RDQS 以及DM / DQ to WCK等长规则都加到了DM / DQ这个等长规则中去了,因为芯片手册上的设计要求中的DM / DQ这个group的等长误差是+-50MIL, WCK to RDQS的等长group的规则是62.5MIL,DM / DQ to WCK等长group的规则是相对松一些是150MIL。其实上面的等长规则还是建少了一些的,例如手册上要求的每个channel的WCK0:1,WCK2:3等长误差在+-488MIL,这个规则建议还是补上去吧。

weixin_45223454的博客 1231

Protobuf 安装使用入门教程

讲解Protobuf的安装教程

幸福回头的博客 1万+

深入解析DisplayPort(DP)接口:从主链路到辅助通道的全方位技术剖析

本文深入解析DisplayPort(DP)接口的核心技术架构,重点剖析了其三大功能模块:承载视频/音频数据洪流的Main-Link主链路、负责链路训练与设备控制的AUX CH辅助通道,以及实现智能交互的HPD热插拔检测。文章详细阐述了主链路的可伸缩Lane配置、嵌入式时钟与数据成帧机制,以及辅助通道在设备发现、动态优化信号质量(链路训练)中的关键作用,揭示了DP接口实现高效率与灵活性的设计哲学。

weixin_29267307的博客 492

Mac安装Typescript报错

根本原因是系统级目录的权限限制。推荐通过修改目录权限或使用nvm彻底解决问题。

江拥羡橙的博客 211

【Protobuf】Protobuf快速使用 Java版、Python版

Protobuf介绍。

十一月廿七风雨大作 1万+

EMI辐射发射超标案例

EMI辐射发射超标案例

让你爱上电路设计 8507

ProtoBuf简介及在Python3中的示例

序列化与反序列化基础;ProtoBuf优缺点及适用场景;Python3使用ProtoBuf示例。

WonderThink的博客 3726

UFS软件分区介绍

本文主要介绍了ufs软件分区管理的概况,能够使大家对软件分区有个大体的认识

肥匪斐's blogs 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Protobuf安装步骤

今天看Brpc开源代码的时候,看到了里面提到了google开源的protobuf的数据序列化和反序列工具,所以特地下了源码,试着看下一个简单的使用过程。 1、protobuf的介绍 google protobuf是一个灵活的、高效的用于序列化数据的协议。相比较XML和JSON格式,protobuf更小、更快、更便捷。google protobuf是跨语言的,并且自带了一个编译器(protoc),只...

Zuoerfeng 3万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

c#和python版本的protobuf入门

c# c#的protobuf我使用的是protobuf-net版本 安装方法如下: c#中使用probuf只需要为每种数据类型定义一个类,就可以实现数据的序列化,基本示例代码如下: using System; using ProtoBuf; using System.IO; class Program { static void Main(string[] args) { MemoryStream ms = new Memor.

Good Good Sleep, Day Day Code. 603

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

基于google protobuf的gRPC实现(python版)

1.Protobuf简介 Google Protocol Buffers简称Protobuf,提供一种灵活、高效、自动化的机制,用于序列化结构数据。Protobuf仅需自定义一次所需要的数据格式,然后我们就可以使用Protobuf编译器自动生成各种语言的源码,方便我们读写自定义的格式化数据。另外Protobuf的使用与平台和语言无关,可以在不破坏原数据格式的基础上,扩展新的数据。 我们可以将P...

谓之小一 3489

Protobuf解读及使用

文章目录1.引言1.1 定义:1.2 优点:1.3 编译安装:2.Protobuf 使用2.1 编写proto文件2.2 protoc编译proto文件2.3 调用addressbook.pb.h文件 1.引言 1.1 定义:    Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平台无关、语言无关、可扩展,可用于通讯协议和数据存储等领域...

蒋成的博客 1919

[转]google protobuf安装与使用

google protobuf是一个灵活的、高效的用于序列化数据的协议。相比较XML和JSON格式,protobuf更小、更快、更便捷。google protobuf是跨语言的,并且自带了一个编译器(protoc),只需要用它进行编译,可以编译成Java、python、C++、C#、Go等代码,然后就可以直接使用,不需要再写其他代码,自带有解析的代码。更详细的介绍见: Protocol Buffe...

dickshell的专栏 3367
上一篇: OpenCv-Python 开源计算机视觉库!
下一篇: Python基础-你必备的语言技能包!
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值