protobuf是google开发的一种数据描述语言,与JSON/XML类似,支持对结构化数据进行序列化和反序列化。可用于协议通讯和数据存储
特性:
- 支持跨语言
- 序列化后体积小
- 序列化和反序列化的速度快
原理:
-
对数字进行可变长处理,整形用1-5个字节存储,64位整形用1-9个字节存储,形式为tag|varint/ZigZag
输入整形判断整形是否小于127,如果是,则用1个字节来存储,存储结束
如果大于127,则现存低七位,并在第八位赋值1,表示整形还没存储结束,然后goto step 2
-
对字符串用字符使用tag|len|str的方式来存储
-
tag占一个字节,高4字节存储字段编号,低4字节存储字段类型编号
向前兼容和向后兼容
- 不可改变已存在标签的数字
- 不可以增加或删除required字段
- 可以删除可选(optional)活重复(repeated)字段
- 可以添加可选或重复字段,新标签数字必须是之前字段没用过的
缺点:
- 可读性差
- 缺乏自描述
网友评论