简述ProtoBuf
前言
最近在工作中用到了ProtoBuf,但是却不知道这是个什么玩意,在此做下笔记。
由于ProtoBuf底层的内容确实很多,需要慢慢地去品,这里就只做一个简述,知道ProtoBuf干啥的,有啥好处。
简述
ProtoBuf是谷歌提供的一种结构数据序列化方法,多用于前后端通讯数据协议。其优势在于灵活、高效、扩展性好。
ProtoBuf有单独的.proto文件,用于定义数据结构:
message MyProtocol // 字段后面的=表示的是字段的编号
{
required string name = 1; // required表示该字段必须且只能出现1次
optional bytes content = 2; // optional表示该字段可以出现0或1次
repeated int32 num = 3; // repeated表示该字段可以出现任意次数(也可以是0次)
message InternalProtocol
{
int32 age = 1;
string city = 2;
}
optional InternalProtocol info = 4; // 还可以定义子结构类型
}
在不同的语言中,这些.proto文件都会对应生成一个类,从而方便使用者进行协议解析和调用。
比较
像XML、Json和ProtoBuf这三种协议方式都具有数据结构化和数据序列化的能力。
但是XML和Json更多地是体现出来的数据结构化,更便于人和程序的阅读。但是序列化后的数据字节很大,序列化和反序列化的时间较长,数据传输效率不高。
而ProtoBuf的数据相比之下可读性较差,其更多优势体现在于数据的序列化,因为在速度、空间、效率上ProtoBuf更优,并且维护起来只需要关注.proto文件即可。除此之外,在HTTP抓包的时候只能看到字节,加密性也相对好一些。
小结
至于ProtoBuf如何进行序列化和反序列化、ProtoBuf底层算法等之类的知识就不在这里总结了,感兴趣的小伙伴自行查阅相关资料学习。
参考
https://www.jianshu.com/p/a24c88c0526a
https://www.jianshu.com/p/73c9ed3a4877
https://www.jianshu.com/p/62f0238beec8
https://www.jianshu.com/p/ddc1aaca3691
https://developers.google.com/protocol-buffers
|