【问题标题】:How do I delimit a sequence of protocol buffer messages so that they can be read both backwards and forwards?如何分隔一系列协议缓冲区消息,以便可以向后和向前读取它们?
【发布时间】:2018-11-13 17:24:56
【问题描述】:

我目前正在设计一种二进制格式来记录一系列 protobuf 编码的消息。我需要能够阅读最新到最旧(从流末尾)以及最旧到最新的消息,所以我相信我不能使用长度前缀as the docs suggest 来分隔消息,除非我想通过搜索从头到尾的整个日志。

使用 ASCII 控制字符分隔符(即 28 个文件分隔符、29 个组分隔符、30 个记录分隔符、31 个单元分隔符)来分隔 protobuf 消息是否安全?

或者,除了长度前缀之外还使用长度后缀之类的东西来创建消息三明治 (length message length) 以允许向前和向后阅读消息,这是闻所未闻的吗?

这个问题和this one类似,但是后者没有提到反向读取消息的用例,也没有专门处理protobuf消息。

【问题讨论】:

  • 不管怎样,长度后缀(除了前缀)的想法对我来说听起来不错。

标签: protocol-buffers delimiter binary-data


【解决方案1】:

长度后缀适用于从任一端读取。

如果您还需要寻找到流中间并找到下一条消息的开头的能力,您可以使用Consistent Overhead Byte Stuffing 来释放一个字符,例如 0x00,用作分隔符。

【讨论】:

    【解决方案2】:

    使用 ASCII 控制字符分隔符是否安全

    不,基本上。 protobuf-net 可以包含任何可能的字节序列。

    长度后缀可以;不寻常,但可行。

    【讨论】:

      猜你喜欢
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 2012-03-12
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多