我试图使用protoc解码protobuf二进制消息,我收到“无法解析输入”错误 . 我试过 protoc --decode_raw < proto.bin
和 protoc --decode package.MessageType MySchema.proto < proto.bin
.
我在SO中读了两个线程,其中一个表明 protoc --decode
不是100%可靠的,另一个表明开头的消息长度数据需要手动剥离 . 我的问题是
-
如何使用
protoc
工具解码原型二进制文件? -
该工具是否真的不能100%可靠地解码(即使我提供类型)或消息需要一些黑客才能被反序列化? (这引出了一个问题,
protoc --decode
选项的目的是什么?
P.S:我正在使用protoc 3.6.1并且在Java程序中创建消息(syntax = proto2)
1 回答
如果您链接了所谈论的主题,那将会有所帮助 .
但总的来说,是的,您需要在使用protoc解码之前去除长度前缀 . 没有关于如何将长度添加到protobuf消息的标准,有些使用
fixed32
前缀和其他varint
,有些使用更长的标头 . 因此protoc
工具无法解析长度 Headers .我还没有看到
protoc --decode
无法解码有效消息的任何情况 . 但它对错误的容忍度很小,例如截断数据 - 即使只有一个字段被破坏,它也总是拒绝整个消息 .为了更好地调试,您可以使用例如这个工具,逐字节解码并显示发生的第一个错误:https://protogen.marcgravell.com/decode