我尝试将List写入FileStream。由于对象太大,我将列表分成均匀分布的块,然后使用DeflateStream将其附加到FileStream以压缩数据。一切正常。
但是,如果我尝试对其进行解压缩,则会出现错误:'在解析完成之前到达流的末尾'。这是解压缩的代码:
using (FileStream fs = new FileStream(filePath, FileMode.Open)) {
using (DeflateStream ds = new DeflateStream(fs, CompressionMode.Decompress, true)) {
//Deserialize offerte
BinaryFormatter bf = new BinaryFormatter();
//Check position
while (ds.BaseStream.Position < ds.BaseStream.Length) {
result.AddRange((List<User>)bf.Deserialize(ds));
}
}
}
我注意到第一块用户正好被写入结果。然而,当它应该从第二块用户开始时,它会立即发出错误(似乎在尝试获取第二块之前)。我该怎么办或错了?
@Edit 10:43 - 16-10-2015补充说明
如果我跳过DeflateStream并且只使用FileStream,那么它就像魅力一样。
压缩方法(我称这个函数x次,每个块一次):
using (FileStream fs = new FileStream(filePath, FileMode.Append)) {
using (DeflateStream cs = new DeflateStream(fs, CompressionMode.Compress)) {
//Serialize offerte
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(cs, offerte);
}
}