在进行序列化与反序列化的时候,程序出错了:
“二进制流“69”不包含有效的 BinaryHeader。这可能是由于无效流,或由于在序列化和反序列化之间的对象版本更改。”
/// <summary>/// 对接收到或待发送数组做序列化与反序列化的类
/// </summary>
public class BufferHelper
{
/// <summary>
/// 对一个传入的对象序列化为数组
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] Serialize(object obj)
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
bf.Serialize(stream, obj);
byte[] datas = stream.ToArray();
stream.Dispose();
return datas;
}
/// <summary>
/// 将一个字节数组反序列化为一个对象
/// </summary>
/// <param name="datas"></param>
/// <param name="index"></param>
/// <returns></returns>
public static object Deserialize(byte[] datas, int index)
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream stream = new MemoryStream(datas, index, datas.Length - index);
object obj = bf.Deserialize(stream);
stream.Dispose();
return obj;
}
}
找了很久,一直没找到问题的原因,后来突然发现是在传入byte[] datas时,从其他地方传入的数组不完整,这应该是造成了无效流,所以出错。
我们在使用Array.Copy()复制数组时,一定要使目标数组大小能够接受完整的源数组数据。