【发布时间】:2018-08-27 15:51:09
【问题描述】:
尝试在 Java 中使用 protobuf 反序列化消息并获得以下异常。
原因:com.google.protobuf.InvalidProtocolBufferException:解析协议消息时,输入在字段中间意外结束。这可能意味着输入已被截断,或者嵌入的消息误报了自己的长度。 在 com.google.protobuf.InvalidProtocolBufferException.truncatedMessage(InvalidProtocolBufferException.java:86) 在 com.google.protobuf.CodedInputStream$ArrayDecoder.readRawLittleEndian64(CodedInputStream.java:1179) 在 com.google.protobuf.CodedInputStream$ArrayDecoder.readFixed64(CodedInputStream.java:791) 在 com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:534) 在 com.google.protobuf.GeneratedMessageV3.parseUnknownFieldProto3(GeneratedMessageV3.java:305)
【问题讨论】:
-
嗯……对吗?您可以使用 protogen.marcgravell.com/decode 之类的工具来检查 protobuf 有效负载。当人们使用过大的数组作为缓冲区并忘记从末尾修剪未写入的零时,我经常看到这种情况。
-
这是消息的字节串。 \n\x14id:article:v1:964000\x12$\n\x10predicted_topics\x12\x06IS/biz\x1a\x08\xf0l\x8f\xdep\x9f\xe4?
-
你有十六进制或base-64的吗?如果您可以发布 hex 或 base-64,我会更高兴我们谈论相同的字节
-
我不太确定。我使用 Python 的 SerializeToString 来序列化一个类。我完全不知道 API 的作用。
标签: protocol-buffers protobuf-java