首页 > 解决方案 > 解码 protobuf 二进制文件——得到“无法解析输入”

问题描述

我尝试使用 protoc 解码 protobuf 二进制消息,但出现“无法解析输入”错误。我都试过了protoc --decode_raw < proto.binprotoc --decode package.MessageType MySchema.proto < proto.bin

我在 SO 中阅读了两个线程,其中一个表明这protoc --decode不是 100% 可靠的,另一个表明需要手动剥离开头的消息长度数据。我的问题是

PS:我使用的是 protoc 3.6.1,消息是在 Java 程序中创建的(语法=proto2)

标签: protocol-buffers

解决方案


如果您将您谈论的主题链接起来,那将会有所帮助。

但总的来说,是的,您需要在使用 protoc 解码之前去除长度前缀。关于如何为 protobuf 消息添加前缀长度没有标准,有些使用fixed32前缀,有些使用varint更长的标头。因此该protoc工具无法解析长度标头。

而且我还没有看到任何protoc --decode无法解码有效消息的情况。但它对错误的容忍度很小,例如截断数据 - 即使只有一个字段损坏,它也总是拒绝整个消息。

为了更好地调试,您可以使用例如这个工具,它逐字节解码并显示发生的第一个错误: https ://protogen.marcgravell.com/decode


推荐阅读