【问题标题】:Serializing Multiple Objects into ByteArray将多个对象序列化为 ByteArray
【发布时间】:2014-05-18 05:17:09
【问题描述】:

我想知道一件事;如何将多个对象序列化为字节数组。我的目标是通过 tcp 发送序列化对象,接收它,然后反序列化它,然后重新创建它。 我的概念是: 字节数组中的第一件事是“包头”——这将告诉接收者它是什么类型的包; “聊天消息”、“文件传输”等。然后在标题之后我将添加数据包本身。然后最后会有一个“EOF Header”(这将告诉服务器是否收到了整个数据包)。 - 标头是可枚举的(作为字节)。

【问题讨论】:

  • 如果它们是实际的对象类型,您将遇到问题。否则,包含您的数据的类、List 或大多数其他容器比您预期的要容易序列化。
  • 你有序列化列表的例子吗?

标签: vb.net serialization deserialization


【解决方案1】:

哪里你得到这些错误会有所帮助(甚至是必要的),但它可能与此有关:

    Public Shared Function Deserialize(Data As Byte()) As Packet
        Dim MS As New MemoryStream(Data)
        Dim BF As New BinaryFormatter
        MS.Position = 0
        ' or
        'MS.Seek(0, SeekOrigin.Begin)
        Return DirectCast(BF.Deserialize(MS), Packet)
    End Function

播种 memstream 后,流位置保留在末尾。您需要重置它,以便 BF 可以读取所有字节。 (而且你真的不需要序列化数据中的 BOF 和 EOF 之类的东西——即使你发送多个东西,如果你把它们放在一个列表中,它们要么反序列化/不序列化 in toto) .

还可以查看 ProtoBuf-NET - 更快的序列化程序生成更小的数据包,它可以让您反序列化为不同的程序集文化类,NET 的 BF 基本不会欺骗它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多