Google Protobuf 详解
1 简介
Protobuf
是由 Google
设计的一种高效、轻量级的信息描述格式,起初是在 Google
内部使用,后面开源,它具有语言中立、平台中立、高效、可扩展等特性,它非常适合用来做数据存储、RPC
数据交换等。与 json
、xml
相比, Protobuf
的编码长度更短、传输效率更高,其实严格意义上讲,json
、xml
、并非是一种「编码」,而只能称之为「格式」,json
、xml
的内容本身都是字符形式,它们的编码采用的是 ASCII
编码。
- | xml | json | protobuf |
---|---|---|---|
数据结构 | 结构一般复杂 | 结构简单 | 结构比较复杂 |
数据存储方式 | 文本 | 文本 | 二进制 |
数据存储大小 | 大 | 一般 | 小 |
解析效率 | 慢 | 一般 | 快 |
跨语言支持 | 非常多 | 多 | 一般 |
开发成本 | 比较繁琐 | 非常简单 | 一般 |
学习成本 | 一般 | 低 | 一般 |
一旦定义了要处理的数据的数据结构之后,就可以利用 Protobuf
的代码生成工具生成相关的代码。只需使用 Protobuf
对数据结构进行一次描述,即可利用各种不同语言 (proto3
支持 C++、Java、Python、Go、Ruby、Objective-C、C#
) 或从各种不同流中对你的结构化数据轻松读写。
本文讲述 Protobuf
的底层编码原理,以便于了解 Protobuf
为什么编码长度短并且扩展性强,与此同时我们也将了解到它有哪些不足?