【问题标题】:Serialize multiple protobuf messages in java and desesrialize them in Python在java中序列化多个protobuf消息并在Python中反序列化它们
【发布时间】:2018-04-30 20:50:06
【问题描述】:

我想将一堆 protobuf 消息存储在一个文件中,然后再阅读它们。

在 java 中,我可以只使用 'writeDelimitedTo' 和 'parseDelimitedFrom' 来读取和写入文件。但是,我想在 Python 中阅读它,它似乎只有一个 'ParseFromString' 方法。

一些 SO 问题非常相似,例如,Parsing Protocol Buffers, written in Java and read in Python,但这仅适用于单个消息:而不适用于多个消息。

【问题讨论】:

    标签: java python protocol-buffers


    【解决方案1】:

    从原始指南中写道,您需要自己处理消息的大小:

    流式传输多条消息

    如果你想将多条消息写入单个文件或流,它 由您来跟踪一条消息的结束位置和下一条消息的结束位置 开始。协议缓冲区线格式不是自定界的,所以 协议缓冲区解析器无法确定消息的结束位置 自己的。解决这个问题最简单的方法是写大小 在您编写消息本身之前的每条消息。当你阅读 消息返回,您读取大小,然后将字节读入 单独的缓冲区,然后从该缓冲区解析。 (如果你想避免 将字节复制到单独的缓冲区,查看 CodedInputStream 类(在 C++ 和 Java 中)可以被告知将读取限制为 一定数量的字节。)

    https://developers.google.com/protocol-buffers/docs/techniques

    一个简单的解决方案是让您在文件的新行上以 base64 序列化每个原型。

    这样做,在 python 上解析和使用它们会很容易。

    【讨论】:

      猜你喜欢
      • 2013-05-29
      • 2018-03-07
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      相关资源
      最近更新 更多