很奇怪 二进制流“0”不包含有效的 BinaryHeader

zhangbaolin2010 2010-05-27 04:31:44
二进制流“0”不包含有效的 BinaryHeader。这可能是由于无效流,或由于在序列化和反序列化之间的对象版本更改。
是这样的:我序列化一个对象 经过网络传输 反序列化,令人奇怪的是 一会正确,一会报上吗的错误!
哪位 高手有过类似经历,还请帮忙,谢谢。。。

这是我写的关键代码
  /// <summary>
/// 序列化对象
/// </summary>
/// <param name="obj">要序列化的对象</param>
/// <returns>对象的数据</returns>
public static byte[] Serialize(object obj)
{

MemoryStream ms = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
try
{
formatter.Serialize(ms, obj);
}
catch (SerializationException e)
{
Console.WriteLine("Failed to serialize. Reason: " + e.Message);
throw;
}
return ms.ToArray();
}

/// <summary>
/// 反序列化
/// </summary>
/// <param name="data">对象的数据</param>
/// <returns>解析的对象</returns>
public static object Deserialize(byte[] data)
{
object obj =null;
try
{
MemoryStream ms = new MemoryStream(data);
BinaryFormatter formatter = new BinaryFormatter();
obj = formatter.Deserialize(ms);
}
catch (SerializationException e)
{
Console.WriteLine("Failed to deserialize. Reason: " + e.Message);
throw;
}
return obj;
}
...全文
1560 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙飞小相公 2012-11-08
  • 打赏
  • 举报
回复
设置发送Byte[]长度为MemoryStream的Length即可,不能自定义设置byte[]长度
请叫我卷福 2010-07-28
  • 打赏
  • 举报
回复
不结贴
萨拉嘿 2010-06-08
  • 打赏
  • 举报
回复
注意对象的正确性。。。有时候这个异常是因为序列化的对象不正确或是不完整,一会正确,一会报错就可是是因为两次的对象不同,比如说序列化一个类第一次操作使类的属性都正确赋值,序列化正常,而第二次与第一次操作不同造成了异常,我也出现过这个问题,发送端的数据有错误,接收端接收到的数据都是0,但依旧反序列化便报这个错了,仔细调试几次,注意报错时的操作,基本问题会出在这个操作上。。。。希望能帮到你
zhangbaolin2010 2010-06-08
  • 打赏
  • 举报
回复
#3 楼 解释的更具体
我把对发送的数据 进行了数字摘要,然后再接受端 校验数据的完整性,如果不完整这重新发送。
这样 问题就解决了
zhangbaolin2010 2010-06-08
  • 打赏
  • 举报
回复
#4楼 说的对!应该确保数据的准确性
xingyuebuyu 2010-05-27
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100511/23/d28fd63a-76a0-4823-89e6-8b15970d4856.html

先确保你发送的东西接收端能准确的接收到,然后再把序列化的功能加进去发送
xingyuebuyu 2010-05-27
  • 打赏
  • 举报
回复
           MemoryStream ms = new MemoryStream(data);
ms.Position=0
BinaryFormatter formatter = new BinaryFormatter();
obj = formatter.Deserialize(ms);


有时候正常,有时候异常应该不是反序列化代码出现问题,而是你的网络传输部分出现问题了.
也就是你接收的内容到byte[]中有丢包或顺序错乱的问题.

你先检查你的接收部分的代码,或你在序列化传送过程中的代码.
wuyq11 2010-05-27
  • 打赏
  • 举报
回复
序列化问题
参考
zhou23141622 2010-05-27
  • 打赏
  • 举报
回复
同样的问题

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧