Protocol Buffer 原理 学习笔记

Posted Shi Peng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Protocol Buffer 原理 学习笔记相关的知识,希望对你有一定的参考价值。

一、Protocol buffer 简介

Protocol Buffer(简称PB)是google开源的序列化与反序列化的应用层协议。

1)序列化:把文本转成二进制串
2)反序列化:将二进制串恢复成文本

二、PB的优缺点

2.1、优点

1、体积小

序列化后可缩小3倍左右,节省带宽,传输速度快

2、序列化速度快

比Json或xml快20~100倍

3、跨语言

PB兼容多种开发语言

2.2、缺点

1、可读性差

三、应用场景

PB主要用于传输量大、网络环境不太稳定的数据传输场景,如IM即时通讯场景。

PB比Json, xml更小、更快。

四、PB原理

4.1、网络通信协议

序列化&反序列化属于通信协议的一部分,通信协议分TCP/IP(四层)模型和OSI(七层)模型。

PB属于应用层。

4.2、T-L-V数据存储方式

TLV 即 Tag - Length - Value,标识 - 长度 - 字段值 存储方式。

TLV存到方式的优点:
1)不需要分隔符就能分割开字段,避免分隔符占用空间
2)各字段存储紧密,存储空间利用率高
3)若字段的value还没被设置值,那么序列化后不占用空间(不会设定默认值)

4.3、PB序列化解析原理

1、PB将消息中的每个字段进行encode后,再利用TLV存储方式进行数据存储,最终得到一个二进制字节流。
即:序列化=对数据进行编码+存储
2、PB对不同的数据类型采用不同的序列化方式(编码方式&存储方式),如下图:

从上表可以看出:
1、对于 varint 类型,不需要存储 TLV 中的length,即此时PB的存储是TV
2、PB通过采用TLV方式,使得序列化后存储变小。

4.3.1、Varint编码方式介绍

Varint是可变长的编码方式。
原理:用字节表示数字:值越小的数字,使用越少的字节数表示。
作用:通过减少表示数字的字节数而进行数据压缩。
例如,对于 int32 类型的数字,一般需要4个字节;若采用varint表示,对很小的int32数字,则可以用1个字节来表示;虽然大的数字可能占用5个字节,但大多数情况下,消息不会有很大的数字,这样就节省了空间。

以上是关于Protocol Buffer 原理 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Protocol Buffer 序列化原理解析 - 为什么Protocol Buffer性能这么好?

Protocol Buffer 序列化原理大揭秘 - 为什么Protocol Buffer性能这么好?

Google Protocol Buffer 的使用和原理

Google Protocol Buffer 的使用和原理

Google Protocol Buffer 的使用和原理

Google Protocol Buffer 的使用和原理