GZip压缩与解压缩

GZIP的压缩与解压缩代码:

public static class CompressionHelper
        {
            /// <summary> 
            /// Compress the byte[] 
            /// </summary> 
            /// <param name="input"></param> 
            /// <returns></returns> 
            public static byte[] Compress(byte[] input)
            {
                byte[] output;
                using (MemoryStream ms = new MemoryStream())
                {
                    using (GZipStream gs = new GZipStream(ms, CompressionMode.Compress))
                    {
                        gs.Write(input, 0, input.Length);
                        gs.Close();
                        output = ms.ToArray();
                    }
                    ms.Close();
                }
                return output;
            }

            /// <summary> 
            /// Decompress the byte[] 
            /// </summary> 
            /// <param name="input"></param> 
            /// <returns></returns> 
            public static byte[] Decompress(byte[] input)
            {
                List<byte> output = new List<byte>();
                using (MemoryStream ms = new MemoryStream(input))
                {
                    using (GZipStream gs = new GZipStream(ms, CompressionMode.Decompress))
                    {
                        int readByte = gs.ReadByte();
                        while (readByte != -1)
                        {
                            output.Add((byte)readByte);
                            readByte = gs.ReadByte();
                        }
                        gs.Close();
                    }
                    ms.Close();
                }
                return output.ToArray();
            }
        }

 

出处:http://blog.csdn.net/joyhen/article/details/45366969

==================================================================

个人补充一个方法:Stream转byte数组的gzip压缩

        public static byte[] Compress(Stream Source)
        {
            Debug.Assert(null != Source);
            Source.Seek(0, SeekOrigin.Begin);
            byte[] output;
            using (MemoryStream objMem = new MemoryStream())
            {
                using (GZipStream objGzip = new GZipStream(objMem, CompressionMode.Compress))
                {
                    const int BUFFER_SIZE = 1024 * 10;
                    byte[] arrBuffer = new byte[BUFFER_SIZE];
                    int nGetedCount = 0;
                    do
                    {
                        nGetedCount = Source.Read(arrBuffer, 0, BUFFER_SIZE);
                        objGzip.Write(arrBuffer, 0, nGetedCount);
                    } while (nGetedCount > 0);
                    objGzip.Flush();
                    objGzip.Close();
                    output = objMem.ToArray();
                }
                objMem.Close();
            }
            return output;
        }

 

我想在代码中实现客户端压缩时候对压缩文件进行加密,然后把这个压缩包发送给服务器端,服务器端再解密,读取数据。
但是好像gZipStream没有提供加密的方法。
现在不用gzipstream,改用网上开源的ICSharpCode.SharpZipLib做压缩,问题解决了。

posted on 2017-06-15 11:03  jack_Meng  阅读(1208)  评论(0编辑  收藏  举报

导航