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