环境:c#2008或vb2008我的程序中使用的用户数据,非常复杂,基本上全部都是自定义的类,原来用过access数据库,但使用数据库除了速度上较慢之外,自定义类却没法保存。后来,不用数据库了,直接把这些类的实例用二进制序列化的方法进行保存,这样,存、取速度都非常的快!运行也快,但问题也出现了:偶尔会出现一次在打开(反序列化)上次保存的数据文件时,抛出“在分析完成之前就遇到流结尾”的异常,分析此文件的数据时,发现里面都是“0”,再也无法还原这些数据了。这个问题出现的机会大约有几百分之一吧,但也严重地影响了软件的稳定。各位大侠,有没有好的解决办法呢?指教一下好吗?多谢了啊!

解决方案 »

  1.   

    楼主是否可以考虑一下Xml序列化代替二进制序列化。
    http://www.microsoft.com/china/MSDN/library/archives/library/dndotnet/html/objserializ.asp
      

  2.   

    赞成这个方案。我其中做过的一个东西,也涉及到非常多的对象的序列化问题,由于需要上传到数据库中使用二进制的模式非常复杂,而且不利于维护。
    所以我们后来采用了XML序列化的方案,虽然文件的大小增长了许多,但是从来没有出现过存储上的问题。无论是本地保存还是数据库保存都很正常。
      

  3.   


    序列化和反序列化时都log一下,应该是有异常,我以前遇到过
      

  4.   

    准备改为soap方式。
    但在一文章中看到“vs2003和2005的序列化结果几乎不能共享,这是soap格式序列化时的问题”,不知是不是真的?
    如果是真的,那以后要是再出个vs2010,是否能共享2008的呢?
      

  5.   

    引用 9 楼 zhzuo 的回复:
    楼主是否可以考虑一下Xml序列化代替二进制序列化。 
    http://www.microsoft.com/china/MSDN/library/archives/library/dndotnet/html/objserializ.asp 
     
    赞成这个方案。我其中做过的一个东西,也涉及到非常多的对象的序列化问题,由于需要上传到数据库中使用二进制的模式非常复杂,而且不利于维护。 
    所以我们后来采用了XML序列化的方案,虽然文件的大小增长了许多,但是从来没有出现过存储上的问题…
      

  6.   

    几百分之几,不可能,应该说.net的序列化不存在这种情况,除非代码中有其他的问题,
    考虑到你其他应用都比较好,就是在这点方面,建议你还是找出这百分之几的原因,
    我们也做过序列化的应用,在服务端持续运行了几个月了,还从没过类似这种序列化几率的问题,
    同样采用的是二进制序列化方式。
      

  7.   

    加上代码:Stream sm = new Stream();
    sm.Seek(0, SeekOrigin.Begin);
      

  8.   

    sm.Seek(0, SeekOrigin.Begin); 
    这个方法也用了,无效呀~~~
      

  9.   

    赞成 Xml序列化代替二进制序列化
      

  10.   

    Xml序列化有严重的缺陷,不能保存 引用。
      

  11.   

    sm.Seek(0, SeekOrigin.Begin)
    用这个方法后,还会出现同样的异常。如,流的长度为10,会访问到第11个字节。