C# Deflatestream—解析完成之前到达的流的结尾
我尝试将列表写入文件流。由于对象太大,我将列表分成均匀分布的块,并使用DeflateStream将其附加到文件流中以压缩数据。这一切都很好 但是,如果我尝试执行同样的操作来解压缩它,它会给出一个错误:“在解析完成之前到达流的末尾”。这是要解压缩的代码:C# Deflatestream—解析完成之前到达的流的结尾,c#,filestream,compression,deflatestream,C#,Filestream,Compression,Deflatestream,我尝试将列表写入文件流。由于对象太大,我将列表分成均匀分布的块,并使用DeflateStream将其附加到文件流中以压缩数据。这一切都很好 但是,如果我尝试执行同样的操作来解压缩它,它会给出一个错误:“在解析完成之前到达流的末尾”。这是要解压缩的代码: using (FileStream fs = new FileStream(filePath, FileMode.Open)) { using (DeflateStream ds = new DeflateStream(fs, Compr
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));
}
}
}
显然,你没有正确地压缩。序列化时是否关闭/处理
DeflateStream
。我为列表的每一部分调用此代码。哦,现在我知道问题可能出在哪里了。在序列化代码中,使用(DeflateStream…part将块迭代逻辑移动到中是的,现在您说这是有意义的。文件的长度可能写在头中,当您使用第一个块创建文件时。它已经有固定的长度了吗?或者我是在说一些绝对疯狂的事情吗?序列化之后,您的数据是这样的:DEFLATE\u HEADER data DEFLATE\u HEADER data
…,但您尝试将其反序列化,就像它是DEFLATE\u HEADER data data…
,这会关闭二进制格式化程序
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);
}
}