天天看點

C#用Zlib壓縮或解壓縮位元組數組

/// <summary>
        /// 複制流
        /// </summary>
        /// <param name="input">原始流</param>
        /// <param name="output">目标流</param>
        public static void CopyStream(System.IO.Stream input, System.IO.Stream output)
        {
            byte[] buffer = new byte[2000];
            int len;
            while ((len = input.Read(buffer, 0, 2000)) > 0)
            {
                output.Write(buffer, 0, len);
            }
            output.Flush();
        }
        /// <summary>
        /// 壓縮位元組數組
        /// </summary>
        /// <param name="sourceByte">需要被壓縮的位元組數組</param>
        /// <returns>壓縮後的位元組數組</returns>
        private static byte[] compressBytes(byte[] sourceByte)
        {
            MemoryStream inputStream = new MemoryStream(sourceByte);
            Stream outStream = compressStream(inputStream);
            byte[] outPutByteArray = new byte[outStream.Length];
            outStream.Position = 0;
            outStream.Read(outPutByteArray, 0, outPutByteArray.Length);
            outStream.Close();
            inputStream.Close();
            return outPutByteArray;
        }
        /// <summary>
        /// 解壓縮位元組數組
        /// </summary>
        /// <param name="sourceByte">需要被解壓縮的位元組數組</param>
        /// <returns>解壓後的位元組數組</returns>
        private static byte[] deCompressBytes(byte[] sourceByte)
        {
            MemoryStream inputStream = new MemoryStream(sourceByte);
            Stream outputStream = deCompressStream(inputStream);
            byte[] outputBytes = new byte[outputStream.Length];
            outputStream.Position = 0;
            outputStream.Read(outputBytes, 0, outputBytes.Length);
            outputStream.Close();
            inputStream.Close();
            return outputBytes;
        }
        /// <summary>
        /// 壓縮流
        /// </summary>
        /// <param name="sourceStream">需要被壓縮的流</param>
        /// <returns>壓縮後的流</returns>
        private static Stream compressStream(Stream sourceStream)
        {
            MemoryStream streamOut = new MemoryStream();
            ZOutputStream streamZOut = new ZOutputStream(streamOut, zlibConst.Z_DEFAULT_COMPRESSION);
            CopyStream(sourceStream, streamZOut);
            streamZOut.finish();
            return streamOut;
        }
        /// <summary>
        /// 解壓縮流
        /// </summary>
        /// <param name="sourceStream">需要被解壓縮的流</param>
        /// <returns>解壓後的流</returns>
        private static Stream deCompressStream(Stream sourceStream)
        {
            MemoryStream outStream = new MemoryStream();
            ZOutputStream outZStream = new ZOutputStream(outStream);
            CopyStream(sourceStream, outZStream);
            outZStream.finish();
            return outStream;
        }      

zlib.NET庫下載下傳:http://www.componentace.com/zlib_.NET.htm

轉載于:https://www.cnblogs.com/kingBook/p/5970271.html

c#