【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 的学习与使用就越深入。

相关推荐
云烟成雨TD13 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
Wenweno0o13 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
于慨13 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg32132113 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
gelald13 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川13 小时前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月13 小时前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming66613 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
殷紫川13 小时前
深入拆解 Java volatile:从内存屏障到无锁编程的实战指南
java
eddieHoo13 小时前
查看 Tomcat 的堆内存参数
java·tomcat