2008-11-20 67 views
38

我想反序列化一个流,但我总​​是得到这个错误“分析完成之前遇到的流结束”?分析完成之前遇到的流结束?

下面是代码:

 //Some code here 
     BinaryFormatter b = new BinaryFormatter(); 
     return (myObject)b.Deserialize(s);//s---> is a Stream object that has been fill up with data some line over here 

任何一个有想法?

+0

除了下面指出的流位置问题之外,这可能发生的另一个原因是因为您的应用程序在* large *文件写入磁盘之前退出(如果您正在将大量数据序列化到文件流)。要解决这个问题,你需要实现一个阻塞等待,直到文件完全写在这篇文章中:http://stackoverflow.com/questions/10982104/wait-until-file-is-completely-written – 2015-12-11 19:26:47

回答

47

尝试将您的流的位置设置为0,并且不要使用对象,而是使用对象类型。

 BinaryFormatter b = new BinaryFormatter(); 
     s.Position = 0; 
     return (YourObjectType)b.Deserialize(s); 
+0

嗨,我'这里同样的问题,但插入s.Position = 0后;我得到“Stream不支持查找” – Jim 2013-07-18 11:20:24

6

确保系列化完成,该序列化类型的反序列化类型相匹配(即,确保你有一个序列化的BinaryFormatter如果你与一个反序列化)。另外,请确保您序列化的流真正完成序列化,并带有Stream.Flush()或其他效果。

+3

+1围绕您的序列化代码尝试一下。 – Nippysaurus 2010-02-03 01:21:39

1
s.Position = 0; 

这是因为你必须回去开始复制数组上的数据!

0

在我来说,我使用:

stream.Seek(0, SeekOrigin.Begin); 

后,我序列化的流,我反序列化前的数据流的作品的魅力。希望这可以帮助!

-1

我不得不抛出同样的异常,直到我加入了[Serializable接口]标签类我序列化:)

然后一切都非常完美。

+0

这正是我的问题 – 2017-10-06 11:16:44

相关问题