狭いスコープでusing
しておくのは大事だなと再認識。
書いたコード
byte[] original = File.ReadAllBytes(@"C:\Windows\explorer.exe"); var memory = new System.IO.MemoryStream(); var gzip = new System.IO.Compression.GZipStream( memory, System.IO.Compression.CompressionMode.Compress); gzip.Write(original, 0, original.Length); byte[] deflated = memory.ToArray(); Console.WriteLine(deflated.Length); // 1712138
それらしい結果ですが、壊れています。
正しいコード
byte[] original = File.ReadAllBytes(@"C:\Windows\explorer.exe"); var memory = new System.IO.MemoryStream(); var gzip = new System.IO.Compression.GZipStream( memory, System.IO.Compression.CompressionMode.Compress); gzip.Write(original, 0, original.Length); gzip.Dispose(); // !!! byte[] deflated = memory.ToArray(); Console.WriteLine(deflated.Length); // 1727359
Length
が変わりました。なお環境はWindows10 x64です。
Dispose (Close)せずにFlush
でも同じ効果かと思いましたが、変化は見られませんでした。