文章目录
- [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 的学习与使用就越深入。