【问题标题】:Deserialize list of objects using protobuf使用 protobuf 反序列化对象列表
【发布时间】:2014-06-16 19:53:45
【问题描述】:

我正在构建一个带有套接字通信的 C# 服务器和 python 客户端应用程序。服务器将序列化的对象列表发送到客户端,但我不知道(也找不到)如何在 python 中反序列化列表。任何帮助将不胜感激。

【问题讨论】:

  • 您是否尝试过使用pickle
  • 你试过什么?你真的在服务器端使用protoobuf 吗?你试过tutorial吗?
  • 是的,我正在使用 protobuf。我可以毫无问题地反序列化单个对象,但我不知道如何使用列表来实现。这就是为什么我不能尝试任何事情,因为我不知道。 @DarinDouglass我是python新手,但我猜pickle不会与.net交谈。这就是我使用 protobuf 的原因
  • P.S.是的,我看过官方教程,但没有提到反序列化列表

标签: python protocol-buffers protobuf-net


【解决方案1】:

好的,如果有人感兴趣,我找到了解决方案。诀窍是创建一种新的消息类型并重复添加原始消息类型。方法如下

message TransactionPackets {
    repeated TransactionPacket packet = 1;
}

message TransactionPacket {
    required int32 trans_id = 1;
    required string user_id = 2;
    required int64 date = 3;
}

现在我可以通过调用 TransactionPackets.ParseFromString() 简单地反序列化对象列表

【讨论】:

    【解决方案2】:

    检查一下:

    “Protocol Buffer 有线格式不是自定界的,因此协议缓冲区解析器无法自行确定消息的结束位置。解决此问题的最简单方法是在编写消息本身之前写入每条消息的大小. 当您读回消息时,您会读取大小,然后将字节读入单独的缓冲区,然后从该缓冲区进行解析。”

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

    【讨论】:

    • 我正在使用 protobuf-net。我不知道它如何序列化数据和/或将每条消息的大小放在哪里:(
    猜你喜欢
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多