当前位置: 首页 > news >正文

Protobuf详解及入门指南

Protobuf详解及入门指南

大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在分布式系统和跨平台通信中,高效、轻量的序列化协议尤为重要。Google的Protocol Buffers(简称Protobuf)是目前广泛使用的一种数据序列化格式。它不仅速度快、占用空间小,而且支持多种编程语言,非常适合需要高性能通信的应用。本文将详细介绍Protobuf的基本概念、使用方法及其优势。

什么是Protobuf

Protobuf是Google开发的一种与语言无关、平台无关的可扩展机制,用于序列化结构化数据。简单来说,它能够将结构化数据转换成字节流,以便于在网络上传输或者持久化存储,同时也可以从字节流中恢复原始数据结构。

Protobuf的基本概念

.proto文件

Protobuf的使用首先需要定义消息结构,这些定义存储在一个.proto文件中。一个简单的.proto文件如下:

syntax = "proto3";message Person {int32 id = 1;string name = 2;string email = 3;
}

这个文件定义了一个名为Person的消息结构,包含三个字段:idnameemail

编译.proto文件

定义好.proto文件后,需要使用protoc编译器将其编译成特定编程语言的代码。以Java为例,编译命令如下:

protoc --java_out=. person.proto

这会生成对应的Java类,可以在代码中直接使用。

序列化和反序列化

编译生成的类包含序列化和反序列化的方法,可以方便地将消息对象转换为字节数组或从字节数组恢复为消息对象。以下是一个简单的Java示例:

// 创建一个Person对象
Person person = Person.newBuilder().setId(1).setName("Alice").setEmail("alice@example.com").build();// 序列化
byte[] data = person.toByteArray();// 反序列化
Person person2 = Person.parseFrom(data);

Protobuf的优势

高效的二进制格式

与JSON、XML等文本格式相比,Protobuf使用二进制格式进行编码,数据传输和存储效率更高,占用空间更小,解析速度更快。

强类型系统

Protobuf提供了一个强类型系统,确保数据结构的类型安全,减少了由于类型不匹配导致的错误。

向后兼容和向前兼容

Protobuf支持消息的版本控制,可以方便地添加新的字段而不影响旧的消息格式。这使得系统能够在不同版本之间进行平滑升级和演进。

多语言支持

Protobuf支持多种编程语言,包括Java、C++、Python、Go等,使得它在跨语言通信中非常方便。

Protobuf的使用场景

分布式系统

在分布式系统中,节点之间需要高效地通信。Protobuf的高效编码和解码使其成为理想选择。例如,gRPC是一种基于Protobuf的高性能RPC框架,广泛应用于微服务架构中。

数据存储

Protobuf不仅适用于数据传输,还可以用于高效的数据存储。例如,许多大数据系统使用Protobuf来存储结构化数据,以减少存储空间和提高访问速度。

配置文件

在需要跨平台共享配置文件时,使用Protobuf可以确保配置数据的一致性和高效解析。

入门指南

安装Protobuf编译器

首先,下载并安装Protobuf编译器protoc,可以从Protobuf的GitHub仓库获取最新版本。安装后,可以通过以下命令检查是否安装成功:

protoc --version

创建.proto文件

创建一个新的.proto文件,并定义消息结构。例如,创建一个名为addressbook.proto的文件:

syntax = "proto3";message Person {int32 id = 1;string name = 2;string email = 3;
}message AddressBook {repeated Person people = 1;
}

编译.proto文件

使用protoc编译器将.proto文件编译成目标语言的代码。例如,编译成Java代码:

protoc --java_out=. addressbook.proto

在代码中使用生成的类

编译生成的类可以在代码中直接使用,例如创建、序列化和反序列化AddressBook对象。

AddressBook.Builder addressBook = AddressBook.newBuilder();
Person person = Person.newBuilder().setId(1).setName("Alice").setEmail("alice@example.com").build();
addressBook.addPeople(person);// 序列化
byte[] data = addressBook.build().toByteArray();// 反序列化
AddressBook addressBook2 = AddressBook.parseFrom(data);

总结

Protobuf作为一种高效的序列化协议,具有速度快、占用空间小、强类型系统、向后兼容和多语言支持等优势。

相关文章:

Protobuf详解及入门指南

Protobuf详解及入门指南 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在分布式系统和跨平台通信中,高效、轻量的序列化协议尤为重要。Google的Pro…...

[Java基本语法] 逻辑控制与方法

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀线程与…...

新手教学系列-​​​​​​基础知识(SSH使用)

基础知识(SSH使用) 什么是ssh Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境[1]。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接[2]。虽然任何网络服务都可以通过SSH实现安全传输,SS…...

如何通过细节处理,让展馆展示效果倍增?

如今,企业展览馆已经成为企业树立形象、产品推广的重要平台,他们利用当下流行的多媒体技术,精心设计出一个展览馆,不仅能够吸引观众的眼球,还能够让企业品牌形象更加突出,不过想要制作出一个优质的企业展览…...

汽车IVI中控开发入门及进阶(二十九):i.MX6

前言: i.MX 6双/6Quad处理器集成多媒体应用处理器,是不断增长的多媒体产品系列的一部分,提供高性能处理,并针对最低功耗进行了优化。 i.MX 6Dual/6Quad处理器采用先进的quad-ArmCortex-A9内核,运行速度高达800 MHz,包括2D和3D图形处理器、1080p视频处理和集成电源管理。…...

2024-Pop!_OS新版本,新桌面环境的消息

原文:A Blog to Satisfy Your Monthly COSMIC Fix(es) - System76 Blog Pop!_OS开发团队正在为他们的发行版开发一个定制桌面。这个新的桌面环境被称为COSMIC,是用Rust语言编写的,超快的COSMIC应用商店几乎已经实现!alpha版本只剩下一些次要…...

三分钟了解链动3+1模式

在电商领域的营销策略中,链动31模式以其独特的魅力和优势,吸引了众多商家的目光。下面,我们将对这一模式进行深度剖析,并探讨其相较于链动21模式的优势所在。 一、身份设置与奖励机制 链动31模式在身份设置上分为三种&#xff1…...

加密excel(Python)

文章目录 一、EXCEL加密 一、EXCEL加密 import randomfrom win32com.client import Dispatchdef random_password(length20):默认返回20位随机密码key ""characters "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"for i in range(l…...

解决Unity-2020 安卓异形屏黑边

背景 Unity 2020.3.17 版本开发的游戏,打apk包,发现两个问题 如图下午所示,实体白色导航栏,阻挡了整个安卓UI界面,难看还影响美观。 安卓系统 12-13 版本手机,异形屏。一侧安全区黑边遮挡,占空间…...

python-给你比个五彩斑斓的❤️

import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import LineCollectiont np.linspace(0, 2 * np.pi, 1000) x 16 * np.sin(t)**3 y 13 * np.cos(t) - 5 * np.cos(2 * t) - 2 * np.cos(3 * t) - np.cos(4 * t)# 创建一个颜色序列 colors …...

【Go】使用Go语言实现AES CBC No Padding加密和解密

冷雨悄悄停吧 天真的心因为你 那管多风雨天仍和你一起 告诉你我其实多么的想你 其实我我真的爱着你 🎵 蒋明周《真的爱着你》 引言 高级加密标准(AES)是一种广泛使用的加密算法。它可以工作在多种模式下,最…...

安装VS Code 提示This User Installer is not meant to be run as an Administrator问题

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 在vs code官网(https://code.visualstudio.com/)下载安装包,显示如下提示信息: This User Installer is not meant to be run as an Administrator.…...

keepalived服务详解与实验 基于centos8

目录 keepalivedHA简介常用的高可用软件keepalived简介 keepalived常用模块keepalived功能简介keepalived常用文件keepalived配置文件详解keepalived实验1-上手环境准备安装服务主配置文件修改启动服务效果查看 keepalived脑裂1. 脑裂现象简介2. 脑裂的原因3. 脑裂的预防和解决…...

vue技巧(十)全局配置使用(打包后可修改配置文件)

1、背景 vue打包目前主流用的有webpack和vite两种,默认用的webpack。(二者的区别大家可以各自上网查,我没用过vite,所以不过多介绍)vue通过webpack打包后,源码会被压缩,但一些关键配置可…...

计算机网络 —— 运输层(运输层概述)

计算机网络 —— 运输层(运输层概述) 运输层运输层端口号复用分用复用(Multiplexing)分用(Demultiplexing) 常用端口号页面响应流程 我们今天进入到运输层的学习: 运输层 我们之前学习的物理层…...

BKP备份寄存器RTC实时时钟

BKP备份寄存器&RTC实时时钟 VDDA和VSSA是内部模拟部分的电路 VDD和VSS_1、2、3是内部数字电路的供电。系统以VDD开头的电源都是主电源。在正常使用STM32时,全部需要接到3.3v电源上。 VBAT备用电池供电引脚,如使用STM32内部的BKP和RTC,引…...

基于协同过滤算法的电影推荐

基于协同过滤算法的电影推荐 电影推荐系统使用了基于**协同过滤(Collaborative Filtering)的算法来生成推荐。具体来说,使用了基于用户的协同过滤(User-Based Collaborative Filtering)**算法,步骤如下&am…...

IEEE754、linear11、linear16浮点数应用原理

IEEE754、linear11、linear16浮点数应用原理 1 浮点数应用1.1 IEEE754 浮点数标准1.2 PMBUS浮点数格式 2 浮点数原理2.1 IEEE754 浮点数解析2.2 PMBUS浮点数解析 3 浮点数代码应用3.1 IEEE754 浮点数应用3.1.1 将浮点变量赋值,直接打印整型(32位&#xf…...

6、 垃圾回收 浏览器事件循环

垃圾回收 & 浏览器事件循环 垃圾回收引用计数算法标记清除(mark-sweep)算法标记整理(Mark-Compact)算法 内存管理浏览器事件循环宏任务微任务整体流程 垃圾回收 垃圾回收,又称为:GC(garbag…...

Java多线程面试重点-2

16.Synchronized关键字加在静态方法和实例方法的区别? 修饰静态方法,是对类进行加锁(Class对象),如果该类中有methodA和methodB都是被Synch修饰的静态方法,此时有两个线程T1、T2分别调用methodA()和methodB()&#x…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

浅谈不同二分算法的查找情况

二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况&#xf…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

【C++进阶篇】智能指针

C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

Web后端基础(基础知识)

BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...