C# 檔案流壓縮解壓

來源:互聯網
上載者:User
 /// <summary>    /// 檔案流壓縮解壓    /// </summary>    public class ZipHelper    {        public static int BEST_COMPRESSION = 9;        public static int BEST_SPEED = 1;        public static int DEFAULT_COMPRESSION = -1;        public static int NO_COMPRESSION = 0;        #region  Deflate壓縮        #region Deflate壓縮        /// <summary>        /// Deflate方式壓縮(預設壓縮層級最高)        /// </summary>        /// <param name="stream"></param>        /// <returns></returns>        public static Stream Deflate(Stream stream)        {            return ZipHelper.Deflate(stream, ZipHelper.DEFAULT_COMPRESSION);        }        /// <summary>        ///  Deflate方式壓縮        /// </summary>        /// <param name="stream"></param>        /// <param name="level">壓縮品質層級(0~9)</param>        /// <returns></returns>        public static Stream Deflate(Stream stream, int level)        {            byte[] array = ZipHelper.StreamToBytes(stream);            byte[] array2 = new byte[array.Length];            Deflater deflater = new Deflater();            deflater.SetLevel(level);            deflater.SetStrategy(DeflateStrategy.Default);            deflater.SetInput(array);            deflater.Finish();            int num = deflater.Deflate(array2);            byte[] array3 = new byte[num];            Array.Copy(array2, array3, num);            return ZipHelper.BytesToStream(array3);        }        /// <summary>        /// Deflate方式壓縮        /// </summary>        /// <param name="input"></param>        /// <param name="level">壓縮品質層級(0~9)</param>        /// <returns></returns>        public static byte[] Deflate(byte[] input, int level)        {            byte[] result;            try            {                if (input == null && input.Length == 0)                {                    result = new byte[0];                }                else                {                    byte[] array = new byte[input.Length];                    Deflater deflater = new Deflater();                    deflater.SetLevel(level);                    deflater.SetStrategy(DeflateStrategy.Default);                    deflater.SetInput(input);                    deflater.Finish();                    int num = deflater.Deflate(array);                    byte[] array2 = new byte[num];                    Array.Copy(array, array2, num);                    result = array2;                }            }            catch (Exception innerException)            {                throw new Exception("壓縮程式出錯!", innerException);            }            return result;        }        #endregion        #region Inflate解壓        /// <summary>        /// Inflate解壓        /// </summary>        /// <param name="input"></param>        /// <returns></returns>        public static byte[] Inflate(byte[] input)        {            byte[] result;            try            {                if (input == null && input.Length == 0)                {                    result = new byte[0];                }                else                {                    Inflater inflater = new Inflater();                    inflater.SetInput(input);                    byte[] array = new byte[1024];                    using (MemoryStream memoryStream = new MemoryStream())                    {                        for (int i = inflater.Inflate(array, 0, array.Length); i > 0; i = inflater.Inflate(array, 0, array.Length))                        {                            memoryStream.Write(array, 0, i);                        }                        byte[] buffer = memoryStream.GetBuffer();                        memoryStream.Close();                        result = buffer;                    }                }            }            catch (Exception innerException)            {                throw new Exception("解壓縮程式出錯!", innerException);            }            return result;        }        /// <summary>        /// Inflate解壓        /// </summary>        /// <param name="zipStream"></param>        /// <returns></returns>        public static Stream Inflate(Stream zipStream)        {            byte[] input = ZipHelper.StreamToBytes(zipStream);            byte[] bytes = ZipHelper.Inflate(input);            return ZipHelper.BytesToStream(bytes);        }        #endregion        #endregion        #region GZip壓縮        /// <summary>        /// GZip壓縮        /// </summary>        /// <param name="srcStream"></param>        /// <param name="output"></param>        public static void GZipCompress(Stream srcStream, Stream output)        {            ZipHelper.GZipCompress(srcStream, 6, output);        }        /// <summary>        ///  GZip壓縮        /// </summary>        /// <param name="srcStream"></param>        /// <param name="compressLevel">壓縮品質層級(0~9)</param>        /// <param name="output"></param>        public static void GZipCompress(Stream srcStream, int compressLevel, Stream output)        {            if (compressLevel < 1 || compressLevel > 9)            {                throw new Exception(string.Format("您指定的壓縮層級 {0} 不在有效範圍(1-9)內", compressLevel));            }            srcStream.Position = 0L;            GZipOutputStream gZipOutputStream = new GZipOutputStream(output);            gZipOutputStream.SetLevel(compressLevel);            try            {                int i = 4096;                byte[] buffer = new byte[i];                while (i > 0)                {                    i = srcStream.Read(buffer, 0, i);                    gZipOutputStream.Write(buffer, 0, i);                }            }            catch (Exception ex)            {                throw new Exception("GZip壓縮出錯:" + ex.Message);            }            srcStream.Close();            gZipOutputStream.Finish();        }        /// <summary>        ///  GZip解壓        /// </summary>        /// <param name="zipStream"></param>        /// <param name="outputStream"></param>        public static void GZipDeCompress(Stream zipStream, Stream outputStream)        {            GZipInputStream gZipInputStream = new GZipInputStream(zipStream);            try            {                int i = 4096;                byte[] buffer = new byte[i];                while (i > 0)                {                    i = gZipInputStream.Read(buffer, 0, i);                    outputStream.Write(buffer, 0, i);                }            }            catch (Exception ex)            {                throw new Exception("GZip解壓縮出錯:" + ex.Message);            }            zipStream.Close();            gZipInputStream.Close();        }        #endregion        #region  BZip2壓縮        /// <summary>        /// BZip2壓縮        /// </summary>        /// <param name="inStream"></param>        /// <param name="outStream"></param>        /// <param name="blockSize"></param>        public static void BZip2Compress(Stream inStream, Stream outStream, int blockSize)        {            BZip2.Compress(inStream, outStream, blockSize);        }        /// <summary>        /// BZip2解壓        /// </summary>        /// <param name="inStream"></param>        /// <param name="outStream"></param>        public static void BZip2Decompress(Stream inStream, Stream outStream)        {            BZip2.Decompress(inStream, outStream);        }        #endregion        private static byte[] StreamToBytes(Stream stream)        {            byte[] array = new byte[stream.Length];            stream.Seek(0L, SeekOrigin.Begin);            stream.Read(array, 0, array.Length);            stream.Close();            return array;        }        private static Stream BytesToStream(byte[] bytes)        {            return new MemoryStream(bytes);        }        private static void StreamToFile(Stream stream, string fileName)        {            byte[] array = new byte[stream.Length];            stream.Read(array, 0, array.Length);            stream.Seek(0L, SeekOrigin.Begin);            FileStream fileStream = new FileStream(fileName, FileMode.Create);            BinaryWriter binaryWriter = new BinaryWriter(fileStream);            binaryWriter.Write(array);            binaryWriter.Close();            fileStream.Close();        }        private static Stream FileToStream(string fileName)        {            FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);            byte[] array = new byte[fileStream.Length];            fileStream.Read(array, 0, array.Length);            fileStream.Close();            return new MemoryStream(array);        }    }

以上就是C# 檔案流壓縮解壓的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.