我们先用一张思维导图进行大致了解:

⼀、初识 ProtoBuf
1. 序列化概念
a.序列化和反序列化
- 序列化:把对象转换为字节序列的过程 称为对象的序列化。
- 反序列化:把字节序列恢复为对象的过程 称为对象的反序列化。
b.什么情况下需要序列化
- 存储数据:当你想把的内存中的对象状态保存到⼀个⽂件中或者存到数据库中时。
- ⽹络传输:⽹络直接传输数据,但是⽆法直接传输对象,所以要在传输前序列化,传输完成后反序列化成对象。例如我们之前学习过 socket 编程中发送与接收数据。
c.序列化实现格式
xml、json、 protobuf
2. ProtoBuf 是什么
官方原文
Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data ‒ think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.
中文翻译 Protocol Buffers 是 Google 的一种语言无关、平台无关、可扩展的结构化数据序列化方案,可用于通信协议、数据存储等场景。 它和 XML 同类,是灵活高效、自动化的结构化数据序列化机制,但比 XML 更小、更快、更简单。 你只需要定义一次数据结构,就能借助自动生成的源码,用多种语言在各类数据流里读写结构化数据;还可以更新数据结构,不会破坏基于旧结构编译、已经上线运行的程序。
总结 ProtoBuf(Protocol Buffer)是结构化数据序列化方案,核心特点:
- 语言无关、平台无关:支持 C++、Java、Python 等多语言、多平台
- 高效:相比 XML,体积更小、速度更快、用法更简单
- 扩展性、兼容性强:升级数据结构,不影响旧版本程序
3. ProtoBuf 的使⽤特点

ProtoBuf 使用步骤
- 编写
.proto文件:定义结构对象(message)以及里面的属性字段。- 使用 protoc 编译器编译
.proto:自动生成配套接口代码,输出头文件与源文件。- 在业务代码中引入生成的头文件:调用生成的接口,完成字段读写、message 对象的序列化、反序列化。
使用特点:
ProtoBuf 使用依赖编译生成的头文件和源文件。依靠代码自动生成机制,开发者不需要手写繁琐的协议解析代码。