但是protobuf不止是简单的解决单一的、不变的序列化/反序列化,他关注的重点在:
1. 确保正确。原生的方式如果纯手写,那么必须保证每个字段读写的大小、顺序都一致,而如果类一多,对人脑是个很大的负担。所以用代码生成代码的方式,减轻人脑的负担就是更好的选择。
2. 高版本兼容低版本。如果你的数据类成员不是一成不变的,而是随着业务的扩大会不断的新增,而旧有的数据不能在升级的同时立即转换为新的格式,也就是说新增了数据类成员,改变了读取逻辑之后,你的程序还有可能读取到旧的格式的数据,如何保证这种情况下逻辑依然正确,用原生的方式就会非常麻烦。而protobuf使用optional配合默认值,可以很轻松的做版本兼容。
3. 减小体积。protobuf对数字采用了Varints编码,越小的数字占用字节越少。当然这点只对网络传输有用。
6>= int32 >=2
Ser Time+Deser Time (ns)
Size, Compressed size [light] in bytes