0
有人可以帮助理解以下代码中的错误吗?因为它显示我只是试图压缩和解压缩内存流。使用GZipStream C压缩/解压缩问题#
//read
var memStream = new MemoryStream();
using (Stream fs = File.Open(@"..\..\..\TextFile.txt", FileMode.Open)) {
var byteArray = new byte[1 * 1024];
int len = 0;
while ((len = fs.Read(byteArray, 0, byteArray.Length)) > 0) {
memStream.Write(byteArray, 0, len);
}
}
Console.WriteLine("read bytes {0}",memStream.Length);
//compress
byte[] compBytes;
using (var memStream2 = new MemoryStream()) {
memStream2.Position = 0;
using (var zipStream = new GZipStream(memStream2, CompressionMode.Compress)) {
memStream.Position = 0;
memStream.CopyTo(zipStream);
compBytes = memStream2.ToArray();
}
}
Console.WriteLine("compressed bytes {0}", compBytes.Length);
//decompress
byte[] decompBytes;
using (var memStream3 = new MemoryStream(compBytes)) {
memStream3.Seek(0, SeekOrigin.Begin);
using (var memStream4 = new MemoryStream()) {
using (var zipStream = new GZipStream(memStream3, CompressionMode.Decompress)) {
zipStream.CopyTo(memStream4);
decompBytes = memStream4.ToArray();
}
}
}
Console.WriteLine("decompressed bytes {0}", decompBytes.Length);
输出:
读取的字节6034
压缩字节10
解压缩字节0
您可以简化您的代码位: 而不是阅读块中的文件,只需使用 fs.CopyTo(memStream); 此外,在构建新的MemoryStream之后,您不需要搜索到流的开始。 – EFrank