gpt4 book ai didi

protocol-buffers - 当 ParseFromArray 在 Protocol Buffer 中返回 true

转载 作者:行者123 更新时间:2023-12-03 23:32:03 29 4
gpt4 key购买 nike

我 ParseFromArray Protocol Buffer 的协议(protocol),协议(protocol)不缺少任何文件。但是 ParseFromArray 函数返回 false .为什么?

最佳答案

我假设您使用的是 C++。 ParseFromArray()如果出现以下情况则失败:

  • 输入数据不是有效的 protobuf 格式。
  • 输入数据缺少必填字段。

  • 如果您确定所有必填字段都已设置,那么您的输入数据一定是已损坏。您应该验证您传递给 ParseFromArray() 的字节和大小。正是您从 SerializeToArray() 获得的字节和大小和 ByteSize()在发送方。您可能会发现您在某处丢失了一些字节,或者某些字节已损坏。

    腐败的常见原因包括:
  • 通过纯文本 channel 传递编码字节。例如。如果您将数据写入(或从中读取)未以“二进制”模式打开的文件,或者您在某些时候将字节存储在 Java String ,数据将被破坏,因为这些 channel 需要文本,并且编码的 protobuf 不是文本。
  • 将字节作为 char* 传递,即假设 NUL 终止。编码的 protobuf 可以包含 '\0'字节,这意味着您不能将一个表示为 char*单独 - 您必须单独包含尺寸。
  • 序列化到比需要大的数组,然后忘记注意实际写入了多少数据。当您调用 SerializeToArray() ,您还必须调用 ByteSize()要查看消息有多大,您必须确保接收端接收到该大小并将其传递给 ParseFromArray() .否则,解析器将认为缓冲区末尾的额外字节是消息的一部分,并且将无法解析它们。
  • 关于protocol-buffers - 当 ParseFromArray 在 Protocol Buffer 中返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19854042/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com