Protocol Buffers(简称 Protobuf)是 Google 开发的一种**语言中立、平台中立、可扩展的结构化数据序列化格式*
Protocol Buffers简称 Protobuf是 Google 开发的一种语言中立、平台中立、可扩展的结构化数据序列化格式主要用于通信协议、数据存储等场景。它不是 JSON 或 XML 那样的文本格式而是二进制序列化格式具有体积小、解析快、强类型约束和向后/向前兼容性好等特点。核心特点✅高效紧凑二进制编码如 Varint、Zigzag 编码通常比 JSON 小 3–10 倍解析速度高数倍✅强契约性通过.proto文件定义数据结构schema生成多语言C/Java/Python/Go/Rust 等绑定代码✅向后/向前兼容支持字段编号、optional/required/repeatedv3 中required已移除、oneof、map等机制保障演进安全✅无运行时反射依赖部分语言如 C/Rust 可零反射高性能解析基本使用流程编写.proto文件例如person.protosyntax proto3; message Person { int32 id 1; string name 2; repeated string email 3; }使用protoc编译器生成目标语言代码protoc--python_out. person.proto# 生成 person_pb2.py在代码中序列化/反序列化importperson_pb2 pperson_pb2.Person()p.id123p.nameAliceserializedp.SerializeToString()# bytesp2person_pb2.Person()p2.ParseFromString(serialized)# 反序列化⚠️ 注意Protobuf v3 默认所有字段为optional不支持requiredv2 已弃用且未设置字段在序列化时被忽略即“默认值不传输”有助于节省空间。Protobuf 的字段编号tag必须唯一是因为它是二进制序列化格式中标识字段的唯一键直接参与 wire format 编码如tag (field_number 3) | wire_type用于在反序列化时准确识别每个字段的类型和位置。该编号不是“顺序索引”而是协议层面的永久标识符一旦发布即不可变更。✅为什么必须唯一Protobuf 使用基于 tag 的稀疏解析二进制流中只包含已设置字段的tag, value对无固定结构偏移解析器仅靠 tag 判断“这是哪个字段”若两个字段使用相同 tag解析器无法区分必然导致数据覆盖、类型错配或解析崩溃如将 string 当作 int 解析.proto编译器在生成代码时也以 tag 为键构建字段映射表如 Python 中_fields_by_number重复 tag 会导致编译失败protoc直接报错Field X has same number as field Y。⚠️重复 tag 的后果禁止编译阶段protoc拒绝编译报错终止若绕过校验如手动构造非法二进制运行时解析结果不可预测后出现的同 tag 字段会覆盖前一个取决于解析实现造成数据丢失或类型混淆如string覆盖int32导致Invalid wire type异常。跳号如用 1、3、5 而非 1、2、3的影响✅完全允许且推荐为未来字段预留空间如预留 2、4、6避免升级时重排编号✅ 不影响性能或大小tag 编码为 Varint小数字1–15仅占 1 字节跳号不增加体积⚠️ 但不建议过大跳跃如从 1 直接到 1000虽合法但可能误导维护者且部分工具如某些调试器/IDE 插件依赖连续编号做可视化易引发可读性问题 关键原则tag 一旦分配永远不可复用即使字段已废弃否则破坏兼容性。补充Protobuf 规范明确要求 tag ∈ [1, 2²⁹−1]即 1–536,870,911且 19000–19999 为 Google 内部保留用户应避开。

相关新闻

GimpPs终极指南:如何3步将GIMP界面秒变Photoshop专业风格

GimpPs终极指南:如何3步将GIMP界面秒变Photoshop专业风格

GimpPs终极指南:如何3步将GIMP界面秒变Photoshop专业风格 【免费下载链接】GimpPs Gimp Theme to be more photoshop like 项目地址: https://gitcode.com/gh_mirrors/gi/GimpPs 如果你是一名Photoshop用户想要转向免费开源的GIMP,或者你已经被GI…

2026/7/19 15:04:03 阅读更多 →
`grpcio` 是 Google 开发的 gRPC 框架的 Python 实现,是一个高性能、开源的通用 RPC(远程过程调用)框架

`grpcio` 是 Google 开发的 gRPC 框架的 Python 实现,是一个高性能、开源的通用 RPC(远程过程调用)框架

grpcio 是 Google 开发的 gRPC 框架的 Python 实现,是一个高性能、开源的通用 RPC(远程过程调用)框架,基于 HTTP/2 协议和 Protocol Buffers(protobuf)序列化格式。其核心优势包括: ✅ 高性能&a…

2026/7/19 15:04:03 阅读更多 →
终极iOS自由:Downr1n开源降级工具完整指南

终极iOS自由:Downr1n开源降级工具完整指南

终极iOS自由:Downr1n开源降级工具完整指南 【免费下载链接】downr1n downgrade tethered checkm8 idevices ios 14, 15. 项目地址: https://gitcode.com/gh_mirrors/do/downr1n 你的iPhone是否因为系统升级而变得卡顿?是否怀念某个旧版本iOS的流畅…

2026/7/19 15:03:03 阅读更多 →

最新新闻

函数加数组实践——排雷

函数加数组实践——排雷

一.实现排雷分为四个步骤1.初始化棋盘分为一个mine数组,一个show数组;用show输出打印游戏雷的数组,用mine来排雷。其中ROWS为行数,COLS为列数;char mine[ROWS][COLS];//存放的是雷的信息 char show[ROWS][COLS];//存放…

2026/7/19 22:18:51 阅读更多 →
TMS320F2838x I2C模块深度解析:从协议基础到高级功能实战

TMS320F2838x I2C模块深度解析:从协议基础到高级功能实战

1. 项目概述与I2C协议核心思想在嵌入式系统开发中,设备间的通信是构建复杂功能的基础。面对众多传感器、存储器和协处理器,如何用最少的硬件资源实现可靠的数据交换,是每个工程师都要面对的挑战。I2C(Inter-Integrated Circuit&am…

2026/7/19 22:18:51 阅读更多 →
C71x DSP流引擎:数据提升与转置的硬件机制与编程实战

C71x DSP流引擎:数据提升与转置的硬件机制与编程实战

1. 流引擎核心概念与C71x实现定位在嵌入式高性能计算,尤其是数字信号处理领域,数据搬运的效率往往是决定整体性能的瓶颈。CPU的算力再强,如果数据供给跟不上,也只能“空转”。传统上,程序员需要手动编写复杂的DMA配置或…

2026/7/19 22:18:51 阅读更多 →
MicroBlaze核SPI与UART串行接口实现指南

MicroBlaze核SPI与UART串行接口实现指南

1. MicroBlaze核串行接口实验概述在嵌入式系统开发中,MicroBlaze作为Xilinx FPGA平台上的软核处理器,其灵活性和可配置性使其成为许多通信接口实验的理想选择。这次我们要探讨的是MicroBlaze核上SPI和UART两种串行接口的实现与应用。这两种接口在工业控制…

2026/7/19 22:18:51 阅读更多 →
Devstral-Small-2-24B-Instruct-2512-5bit开发者指南:API集成与自定义扩展终极教程

Devstral-Small-2-24B-Instruct-2512-5bit开发者指南:API集成与自定义扩展终极教程

Devstral-Small-2-24B-Instruct-2512-5bit开发者指南:API集成与自定义扩展终极教程 【免费下载链接】Devstral-Small-2-24B-Instruct-2512-5bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Devstral-Small-2-24B-Instruct-2512-5bit Devst…

2026/7/19 22:18:51 阅读更多 →
会议记录工具怎么判断是转写型还是纪要型?

会议记录工具怎么判断是转写型还是纪要型?

摘要判断会议记录工具是转写型还是纪要型,可以看六个输出:是否只有文字、是否有主题结构、是否提取结论、是否列行动项、是否识别责任人、是否支持会后复盘。转写型工具解决记录,纪要型工具解决执行。选型时要按会议用途判断,而不…

2026/7/19 22:17:50 阅读更多 →

日新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:00:40 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:00:40 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:00:40 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:00:40 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:00:40 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:00:40 阅读更多 →

月新闻