BinaryFormatter序列化和反序列化的时候有时候出错
偶尔情况下反序列化会出现错误:Attempting to deserialize an empty stream
代码如下,有碰到过这种错误的朋友吗
- C# code
/// <summary> /// 序列化一个对象到文件中 /// </summary> /// <param name="obj">对象</param> /// <param name="filename">文件名</param> /// <returns>是否正确序列化</returns> public static bool SerializeToFile(object obj,string filename) { try { Debug("开始序列化到文件->"+filename); IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None); formatter.Serialize(stream, obj); stream.Close(); Debug("序列化到文件完毕!"); return true; } catch (Exception ex) { Info(ex); return false; } } /// <summary> /// 从文件反序列化一个对象出来 /// </summary> /// <param name="filename">文件名称</param> /// <returns>反序列化的结果对象</returns> public static object DeserializeFromFile(string filename) { Debug("开始从文件->" + filename+"-反序列化"); IFormatter formatter = new BinaryFormatter(); Stream stream =null; object obj = null; try { stream= new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); obj= formatter.Deserialize(stream); stream.Close(); Debug("从文件反序列化成功!"); } catch (Exception ex) { if (stream != null) stream.Close(); Info(ex); throw ex; } return obj; }
[解决办法]
反序列化的时候最好做个判断,流长度太小就抛弃
[解决办法]
在确保文件存在的同时,也判断一下 文件的长度。