我尝试将列表写入 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);
}
}