PROTOC --decode_raw输出的修改后字符串如何序列化回字节流?
序列化操作指南
前置说明
你当前处理的是无schema的原生protobuf wire format数据,修改后的1:10006完全符合protoc --decode_raw输出的标准格式,可直接通过protoc内置参数完成序列化,无需编写额外的.proto定义文件。
具体操作步骤
- 如果直接通过命令行传入修改后的文本,执行以下命令即可输出对应的序列化字节流:
echo '1:10006' | protoc --encode_raw - 如果修改后的文本已写入本地文件(例如命名为
decoded.txt),可执行以下命令将序列化结果直接保存为字节流文件:cat decoded.txt | protoc --encode_raw > serialized.bin - 可选验证步骤:将序列化得到的字节流再次传入
protoc --decode_raw,确认输出为1:10006即可证明操作正确。
注意事项
- 需使用protobuf 3.0及以上版本的protoc,该版本默认支持
--encode_raw原生编解码参数 - 输入的文本格式需和
protoc --decode_raw的输出格式完全对齐,不要随意添加多余空格、换行或注释,否则会触发解析错误 - 无需手动计算varint编码规则,protoc会自动将文本中的数值转换为符合protobuf规范的编码字节
- 由于原数据中字段1为varint类型(首字节
0x08对应field number=1、wire type=0),序列化后输出的首字节固定为0x08,后续字节为10006对应的varint编码值
内容的提问来源于stack exchange,提问作者Cool Jing
相关产品推荐
相关产品推荐

