【ProtoBuf】初识 protobuf

文章目录

  • [1. 序列化概念](#1. 序列化概念)
  • [2. protobuf 是什么](#2. protobuf 是什么)
  • [3. protobuf 的使用特点](#3. protobuf 的使用特点)
  • [4. 学习思路](#4. 学习思路)

1. 序列化概念

序列化和反序列化

  • 序列化:把对象转换为字节序列的过程,称为对象的序列化。
  • 反序列化:把字节序列恢复为对象的过程,称为对象的反序列化。

什么情况下需要序列化?

  • 存储数据:当你想把内存中的对象状态保存到一个文件中或者存到数据库中时。
  • 网络传输:网络直接传输数据,但是无法直接传输对象,所以要在传输前序列化,传输完成后反序列化成对象。例如 socket 编程中发送与接收数据。

如何实现序列化?

  • 常见的方法有三种:xml、json、protobuf。

2. protobuf 是什么

Protocol Buffers 是 Google 的一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。

Protocol Buffers 类比于 XML,是一种灵活,高效,自动化机制的结构数据序列化方法,但是比 XML 更小、更快、更为简单。

你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序。

简单来讲,ProtoBuf(全称为 Protocol Buffer)是让结构数据序列化的方法,其具有以下特点:

  • 语言无关、平台无关:即 ProtoBuf 支持 Java、C++、Python 等多种语言,支持多个平台。
  • 高效:即比 XML 更小、更快、更为简单。
  • 扩展性、兼容性好:你可以更新数据结构,而不影响和破坏原有的旧程序。

3. protobuf 的使用特点

如下图所示:

  • 编写 .proto 文件,目的是为了定义结构对象(message)及属性内容。
  • 使用 protoc 编译器编译 .proto 文件,生成一系列接口代码,存放在新生成头文件和源文件中。
  • 依赖生成的接口,将编译生成的头文件包含进我们的代码中,实现对 .proto 文件中定义的字段进行设置和获取,和对 message 对象进行序列化和反序列化。

总的来说:ProtoBuf 是需要依赖通过编译生成的头文件和源文件来使用的。有了这种代码生成机制,开发人员再也不用吭哧吭哧地编写那些协议解析的代码了。

4. 学习思路

对 ProtoBuf 的完整学习,将使用 项目推进 的方式完成教学:即对于 ProtoBuf 知识内容的展开,会对一个项目进行一个版本一个版本的升级去讲解 ProtoBuf 对应的知识点。

在后续的内容中,将会实现一个通讯录项目。对通讯录大家应该都不陌生,一般,通讯录中包含了一批的联系人,每个联系人又会有很多的属性,例如姓名、电话等等。

随着对通讯录项目的升级,我们对 ProtoBuf 的学习与使用就越深入。

相关推荐
程序员清风5 分钟前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
皮皮林5511 小时前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
华仔啊7 小时前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing7 小时前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
日月云棠1 天前
各版本JDK对比:JDK 25 特性详解
java
用户8307196840821 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
JavaGuide1 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
IT探险家1 天前
Java 基本数据类型:8 种原始类型 + 数组 + 6 个新手必踩的坑
java
花花无缺1 天前
搞懂new 关键字(构造函数)和 .builder() 模式(建造者模式)创建对象
java
用户908324602731 天前
Spring Boot + MyBatis-Plus 多租户实战:从数据隔离到权限控制的完整方案
java·后端