以下のコードで何が間違っているのか理解してくれますか? これは、私はちょうどメモリストリームを圧縮し解凍しようとしていることを示しています。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