Protobuf 总结

Protobuf 是什么 Protobuf 是一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,可以用于通信协议和数据存储等。 传输协议 - 如 json、XML IDL - 接口描述语言 存储格式 - 序列化压缩后存储到数据库 核心竞争力 向前向后兼容性 - 新老版本兼容,无需考虑版本升级 多语言代码生成 - 支持 Java、Python、PHP、Go 等编程语言 快&小 - 序列化、反序列化速度快,压缩比优秀 关键技术 varints 编码 每个字节使用其中 7 位保存数字,最高位表示后面是否还有内容 低位在前,高位在后 保留了fixed32和fixed64,用于传递大的正数 int32、int64、unit32、uint64、bool,序列化结果相互兼容,可以修改 zigzag 编码 传统上,负数最高位为 1,小负数会浪费编码长度 (n<<1)^(n>>31) -1 将会被编码成 1,1 将会编码成 2,-2 将会被编码成 3 sint32和sint64使用 zigzag 编码 message structure 编码 Tag-Value 编码 Tag=(field_number<<3)|wire_type->varints wire_type:0 表示 varints,1 表示固定 64 位,5 表示固定 32 位 wire_type:2 表示 Tag-Length-Value 编码(TLV),Length 使用 varints string、bytes、message 嵌套,都采用 TLV 编码 wire_type 只有 0、1、2、5,那么 3 和 4 去哪了?—被废除了 ...

2019-03-14 · 1 min · L