System.IO.Compression メモ
class Program { static void Main(string[] args) { byte[] source = new byte[] { 0, 1, 2, 3, 4 }; byte[] compressData; byte[] restoreData; using (var compressInputStream = new MemoryStream(source)) using (var compressOutputStream = new MemoryStream()) { using (var compressStream = new GZipStream(compressOutputStream, CompressionMode.Compress, true)) { Transfer(compressInputStream, compressStream, 100); } compressData = compressOutputStream.ToArray(); } using (var decompressInputStream = new MemoryStream(compressData)) using (var decompressOutputStream = new MemoryStream()) { using (var decompressStream = new GZipStream(decompressInputStream, CompressionMode.Decompress, true)) { Transfer(decompressStream, decompressOutputStream, 100); } restoreData = decompressOutputStream.ToArray(); } } static void Transfer(Stream inputStream, Stream outputStream, int bufferSize) { byte[] buffer = new byte[bufferSize]; while (true) { int readCount = inputStream.Read(buffer, 0, bufferSize); if (readCount == 0) { break; } outputStream.Write(buffer, 0, readCount); } } }
圧縮時、GZipStream を Close することで、圧縮データが完成することに注意。
Close するまでは、基になるストリームに未完のデータが入っている。
Flush メソッド呼び出してもダメ。