我尝试使用protoc解码protobuf二进制消息,但出现“ 解析输入失败”错误。我同时尝试了protoc --decode_raw < proto.bin
和protoc --decode package.MessageType MySchema.proto < proto.bin
。
我在SO中阅读了两个线程,其中一个表明protoc --decode
不是100%可靠的,而另一个则表明开头的消息长度数据需要手动剥离。我的问题是
protoc
工具解码原始二进制文件?protoc --decode
选项的目的是什么?P.S:我正在使用协议3.6.1,并且消息是在Java程序中创建的(语法= proto2)
答案 0 :(得分:1)
如果您链接了您所讨论的主题,那将会有所帮助。
但是,通常,是的,在使用protoc解码之前,您需要去除长度前缀。对于如何为protobuf消息加上前缀没有标准,有些使用fixed32
前缀,另一些使用varint
,有些具有更长的标头。因此protoc
工具无法解析长度标头。
而且我还没有看到protoc --decode
不会解码有效消息的任何情况。但是它对错误(例如数据被截断)的容忍度很小-即使只有一个字段被破坏,它也始终拒绝整个消息。
为了进行更好的调试,您可以使用例如此工具逐字节解码并显示发生的第一个错误: https://protogen.marcgravell.com/decode