using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; namespace ScrewTurn.Wiki { /// /// Allows to compress and decompress byte streams in memory. /// public static class Compressor { /// /// Compresses data. /// /// The data to compress. /// The compressed data. public static byte[] Compress(byte[] data) { using(MemoryStream output = new MemoryStream()) { using(GZipStream gzip = new GZipStream(output, CompressionMode.Compress, true)) { gzip.Write(data, 0, data.Length); gzip.Close(); } return output.ToArray(); } } /// /// Decompresses data. /// /// The data to decompress. /// The decompressed data. public static byte[] Decompress(byte[] data) { using(MemoryStream input = new MemoryStream()) { input.Write(data, 0, data.Length); input.Position = 0; using(GZipStream gzip = new GZipStream(input, CompressionMode.Decompress, true)) { using(MemoryStream output = new MemoryStream()) { byte[] buff = new byte[64]; int read = -1; read = gzip.Read(buff, 0, buff.Length); while(read > 0) { output.Write(buff, 0, read); read = gzip.Read(buff, 0, buff.Length); } gzip.Close(); return output.ToArray(); } } } } } }