Protocol Buffers序列化原理

1. 使用Varint编码数据,越小的数据,用少的字节编码。如小于128的用一个字节编码,大于128的用多个字节编码。同时,每个字节最高为1或者0表示是否为数字的一部分。

2. 由于负数的补码表示很大,使用了ZigZag编码,转换成正数,使用Varint编码

3. 使用T-V,没有使用T-L-V, 即Tag- Length -Value,少了length字段

4. Tag表示,标识号 + wire。 

// Tag 的具体表达式如下
 Tag  = (field_number << 3) | wire_type
 enum WireType { 
      WIRETYPE_VARINT = 0, 
      WIRETYPE_FIXED64 = 1, 
      WIRETYPE_LENGTH_DELIMITED = 2, 
      WIRETYPE_START_GROUP = 3, 
      WIRETYPE_END_GROUP = 4, 
      WIRETYPE_FIXED32 = 5
   };

pb整个序列化协议特别好,序列化后结构很紧凑。体积小,规则简单,序列化和反序列化效率高

参考:https://blog.csdn.net/carson_ho/article/details/70568606

这个博客写的非常好

猜你喜欢

转载自www.cnblogs.com/luckygxf/p/9224589.html