using System; using System.IO; namespace ICSharpCode.SharpZipLib.GZip { /// /// An example class to demonstrate compression and decompression of GZip streams. /// public static class GZip { /// /// Decompress the input writing /// uncompressed data to the output stream /// /// The readable stream containing data to decompress. /// The output stream to receive the decompressed data. /// Both streams are closed on completion if true. public static void Decompress(Stream inStream, Stream outStream, bool isStreamOwner) { if (inStream == null || outStream == null) { throw new Exception("Null Stream"); } try { using (GZipInputStream bzipInput = new GZipInputStream(inStream)) { bzipInput.IsStreamOwner = isStreamOwner; Core.StreamUtils.Copy(bzipInput, outStream, new byte[4096]); } } finally { if (isStreamOwner) { // inStream is closed by the GZipInputStream if stream owner outStream.Dispose(); } } } /// /// Compress the input stream sending /// result data to output stream /// /// The readable stream to compress. /// The output stream to receive the compressed data. /// Both streams are closed on completion if true. /// Block size acts as compression level (1 to 9) with 1 giving /// the lowest compression and 9 the highest. public static void Compress(Stream inStream, Stream outStream, bool isStreamOwner, int level) { if (inStream == null || outStream == null) { throw new Exception("Null Stream"); } try { using (GZipOutputStream bzipOutput = new GZipOutputStream(outStream, level)) { bzipOutput.IsStreamOwner = isStreamOwner; Core.StreamUtils.Copy(inStream, bzipOutput, new byte[4096]); } } finally { if (isStreamOwner) { // outStream is closed by the GZipOutputStream if stream owner inStream.Dispose(); } } } } }