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

相关推荐
zh_xuan2 小时前
kotlin 尾随Lambda表达式函数的常用简写
开发语言·kotlin
码出财富10 小时前
SpringBoot 内置的 20 个高效工具类
java·spring boot·spring cloud·java-ee
沐知全栈开发10 小时前
Perl 数据库连接
开发语言
我是小疯子6610 小时前
Python变量赋值陷阱:浅拷贝VS深拷贝
java·服务器·数据库
森叶10 小时前
Java 比 Python 高性能的原因:重点在高并发方面
java·开发语言·python
二哈喇子!10 小时前
Eclipse中导入外部jar包
java·eclipse·jar
微露清风10 小时前
系统性学习C++-第二十二讲-C++11
java·c++·学习
qq_3168377510 小时前
uni.chooseMedia 读取base64 或 二进制
开发语言·前端·javascript
方圆工作室10 小时前
【C语言图形学】用*号绘制完美圆的三种算法详解与实现【AI】
c语言·开发语言·算法