将多个对象序列化为ByteArray

时间:2014-04-05 22:01:36

标签: vb.net serialization deserialization

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

1 个答案:

答案 0 :(得分:0)

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

    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这样的东西 - 即使你发送了多个东西,如果你把它们放在一个列表中,它们将在toto 中取消/序列化) 。

另外看一下ProtoBuf-NET - 更快的序列化程序制作更小的数据包,并且它会让你反序列化为一个不同的汇编文化类,NET的BF不会在没有基本欺骗的情况下完成它。