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性能这么好?