protobuf描述和语法请百度一下。
其他语言(Java,python)不能直接解析c二进制结构体,前端不太好嵌入c代码
方案一
使用一个长度在protobuf序列化后不变的包头,获取固定长度反序列化出包头,解析包头获取包体的类型和长度
message MsgHead
{
fixed32 msgType = 1;
fixed64 msgLength = 2;
sfixed32 recvSide = 3;
sfixed64 other = 4;
}
方案二
开源项目SMSS的设计 地址 https://gitee.com/learnhow/encrypted_stream
解析固定长度的包头长度字节部分,解析获取长度,反序列化包头获取信息
固定长度描述的标志位+固定长度描述的包头长度+变长的序列化后的二进制包头 SMSS项目使用4个字节的AB47为标志
字段设置0和默认值0的区别
在2和3高版本 有 bool has***()函数 判断字段是否设置 也可以添加标志位标识字段是否设置 bool setFlag
protobuf的编码高效和数据更小是对比xml和json格式。体积更小主要体现在int编码和字符串的编码压缩,不适合传输超大数据。跨语言和Java类似,不是真的跨而是官方对每个平台实现了不同的适配。



