我遇到了以下问题.我需要(de)将对象流序列化(二进制)到磁盘上的单个文件.序列化部分不是问题,只需在追加模式下打开一个流并使用.Net的BinaryFormatter Serialize方法就完成了.这种方法的问题是我不能只将这个流提供给BinaryFormatter的反序列化函数,它包含的内容不是我序列化的对象的单个实例.
是否存在针对此问题的常见解决方案?序列化到给定流的所有对象都是相同的类型,因此至少我们不需要弄清楚要反序列化的内容,这是给定的,但它似乎并没有向我提出一种解决方法.
基于回复的澄清:发送的对象数量预计很大,因此将它们全部保存在包装器集合中是不可行的(因为刷新到磁盘需要将它们全部加载到内存中 - >添加新的 - >刷新到磁盘).
[宾语]
[对象] [对象] [对象] [对象] ... [对象]
我需要反序列化单个Object实例.
提前致谢!
答:由于在这个帖子中提到答案(足够清晰),但从未明确说明,我想我会在这里说明:
while (fileStream.Position < fileStream.Length)
messages.Add((Message)formatter.Deserialize(fileStream));
Run Code Online (Sandbox Code Playgroud)
BinaryFormatter将根据需要一次反序列化一个对象:)您可能希望缓存fileStream.Length属性,因为每次调用属性时都会重新计算长度,从而减慢速度.我不知道为什么在我发布这个问题之前我第一次尝试它不起作用,但现在它确实完美无缺.