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个字节,但大多数情况下,消息不会有很大的数字,这样就节省了空间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值