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