I ParseFromArray协议缓冲区的协议,协议不缺任何文件。但是ParseFromArray函数返回false
。为什么呢?
答案 0 :(得分:7)
我假设您正在使用C ++。如果出现ParseFromArray()
则失败:
如果您确定已设置所有必填字段,则必须是输入数据已损坏的情况。您应该验证传入ParseFromArray()
的字节和大小正好您在发送方SerializeToArray()
和ByteSize()
获得的字节和大小。您可能会发现某处丢失了某些字节,或者某些字节已损坏。
腐败的常见原因包括:
String
中,则数据将被破坏,因为这些渠道期望文本,编码的protobufs不是文本。char*
传递,即假设NUL终止。编码的protobufs可以包含'\0'
个字节,这意味着您不能单独表示一个char*
- 您必须分别包含该大小。SerializeToArray()
时,您还必须致电ByteSize()
以查看邮件的大小,并且您必须确保接收端收到该尺寸并将其传递给ParseFromArray()
。否则,解析器会认为缓冲区末尾的额外字节是消息的一部分,并且无法解析它们。