小编Uni*_*ted的帖子

二进制(De)将对象流序列化为1个文件

我遇到了以下问题.我需要(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属性,因为每次调用属性时都会重新计算长度,从而减慢速度.我不知道为什么在我发布这个问题之前我第一次尝试它不起作用,但现在它确实完美无缺.

.net c# binary serialization file

5
推荐指数
1
解决办法
1905
查看次数

标签 统计

.net ×1

binary ×1

c# ×1

file ×1

serialization ×1