protocol buffer 编解码

本文深入探讨了Protocol Buffer(PB)的序列化和反序列化过程,解析了PB如何将message转换为二进制key-value对,并详细介绍了整数、非整数、字符串、嵌套message以及可选和重复字段的编码规则。通过示例解释了编码过程,包括整数的Varint编码和负数的特殊处理。

平时的开发中使用pb格式协议较多,大致了解了一下pb的编解码,即序列化和反序列化。
本文参考官方文档:https://developers.google.com/protocol-buffers/docs/encoding?hl=zh-cn

先看简单一个示例:

message Test1
{
    required uint32 t = 1;
}

message Test2
{
    required uint32 a    = 1;
    required Test1  test = 2;
    optional uint32 b    = 3;
    optional bytes  s    = 4;
    repeated uint32 list = 5;
}

//定义一个Test2对象,并设置字段值
Test2 test2;
test2.set_a(10);
Test1 *test1 = test2.mutable_test();
test1->set_t(150);
test2.set_s("test");
test2.add_list(300);
test2.add_list(500);

将test2序列化后的结果打印出来, 可发现其结果为(十六进制):08 0a 12 03 08 96 01 22 04 74 65 73 74 28 ac 02 28 f4 03

要想了解如何能够得到这样一串二进制或者根据这串二进制还原出对应的pb数据,就需要了解pb的编解码过程。

在编码过程中,pb会将message中的每个字段序列化成一对key-value,即message序列化后的结果是一系列的key-value。key由字段的tag和type决定(tag是字段的序号,例如a = 1中的1、list = 5中的5;type是字段的类型,例如uint32、bytes……),value是字段值经过一定的编码后的内容。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值