HI 这是我的场景,我必须将对象序列化为文件。
我正在使用binaryformatter将对象序列化为
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream1, object);
我正在编写GetObjectData(),如下所示,
serinfo.AddValue("string1",objecta);
serinfo.AddValue("string2",objectb);
serinfo.AddValue("string3",objectc);
我在objectb中序列化2个列表list1,list2。列表的大小随时间而变化。(每个列表也可能有100000个元素..表示列表中元素的数量会影响流的大小)。所以,当我序列化对象时,我的流大小不应超过10mb而如果它超过我应该写在另一个流。简单地说,如果大小超过10mb,我应该再有一个流,每个流应该采用以下格式
stream1 --> objecta,(objectb)some n values in list,objectc
stream2 --> objecta,(objectb)values in list from n+1 to some m,objectc
..
streamn --> ........
每个流的大小应限制在10mb ..
请提供一些线索来做到这一点.. 提前致谢.. (首先感谢阅读这个大的qn ..:P)
答案 0 :(得分:1)
我想我会将我的对象序列化为一个MemoryStream,然后检查将它添加到当前文件流中是否会超过10MB,并在写入之前启动一个新流。如果愿意的话。
答案 1 :(得分:0)
您无法直接执行此操作,因为只能将一个流传递给Serialize
方法。使用MemoryStream
作为目标,然后手动传播到流或在序列化之前将初始对象分解为碎片
答案 2 :(得分:0)
我建议您将流与序列化分开。也就是说,序列化为一个流(必要的长度),并将该流分别分成10Mb块。