解密:protobuf协议序列化后的变体

本文介绍了protobuf协议的用途,即对结构化数据进行串行化,以减少存储和传输的浪费。通过一个示例展示了protobuf如何序列化一个message,解释了序列化后的每个字节的含义,并探讨了protobuf序列化的优点和缺点,包括速度快、字段可以乱序、小整数压缩等。同时提到了Base 128 Varints编码在protobuf中的应用。
摘要由CSDN通过智能技术生成

1.protobuf是干什么的

protobuf为google公司出品,其全称为Protocol Buffers。关于其是什么网上一搜一大堆,但是初学者往往还是看的晕头转向。其实简单的概括protobuf的功能无非就是对结构化数据串行化。举个简单的小例子

struct Person
{
    int number;             //编号
    char name[100];         //姓名
    char hobby[1000];       //爱好
};

上面我定义了一个简单的用于描述一个人的Person结构体,假定每个人都有一个编号(类似身份证号),我将其定义为int型就姑且认为够用吧。其次是name,好多人奇怪为什么我要给name定义100字节,个人感觉小日本的名字好长所以怕不够用(哈哈)。接着是hobby字段,由于我不能确定每个人到底有多少爱好,也是怕不够存所以就给了1000。
好了数据定义完了现在服务器有100000个人的Person结构体(person[100000])需要保存到磁盘里你会咋么做?
如果你是一个不懂序列化的新手我想你大概会这样做

for(int i = 0; i < 100000; i++)
{
    ......
    fwrite(&person[i],sizeof(struct Person),1,fp);
    ......
}

这么从正确性的角度来说的确没什么问题,但是试想如果大多数人的名

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值