public static Stream CompressStream(Stream stream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            //压缩流
            GZipStream gzipStream = new GZipStream(stream, CompressionMode.Compress,true);
            //将缓冲区中的数据刷新到基础流
            gzipStream.Flush();
            //返回压缩流对象
            return gzipStream;
    
        }        /// <summary>
        /// 解压流操作
        /// </summary>
        /// <param name="stream">需要解压的流对象</param>
        /// <returns>返回解压GZipStream流对象</returns>
        public static Stream DecompressStream(Stream stream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }            GZipStream gzipStream = new GZipStream(stream, CompressionMode.Decompress);     
            gzipStream.Flush();   
            return gzipStream;
        }
//创建一个编码对象
            UTF8Encoding uniEncoding = new UTF8Encoding();
            //将字符串编码成字节序列
            byte[] firstString = uniEncoding.GetBytes("Invalid file path characters are: ");
            MemoryStream memoryStream = new MemoryStream();
 
            // 将字节数组写入到当前流中.
            memoryStream.Write(firstString, 0, firstString.Length);用上面生成一个流 对其加密 加密后解密 就报 GZip 头中的幻数不正确。请确保正在传入 GZip 流
错误

解决方案 »

  1.   

    用SharpZipLib好了,一个函数搞定
      

  2.   

    显然你的CompressStream用法有误,那个不是返回压缩流对象,你将要压缩的原始stream流放入了GZipStream初始化中,变成了输出流了,真正要返回的压缩流对象是GZipStream初始化中的第一个参数。
            #region 压缩解压object
            public static byte[] CompressionObject(object DataOriginal)
            {
                if (DataOriginal == null) return null;
                BinaryFormatter bFormatter = new BinaryFormatter();
                MemoryStream mStream = new MemoryStream();
                bFormatter.Serialize(mStream, DataOriginal);
                byte[] bytes = mStream.ToArray();
                MemoryStream oStream = new MemoryStream();
                DeflateStream zipStream = new DeflateStream(oStream, CompressionMode.Compress);
                zipStream.Write(bytes, 0, bytes.Length);
                zipStream.Flush();
                zipStream.Close();
                return oStream.ToArray();
            }        public static object DecompressionObject(byte[] bytes)
            {
                if (bytes == null) return null;
                MemoryStream mStream = new MemoryStream(bytes);
                mStream.Seek(0, SeekOrigin.Begin);
                DeflateStream unZipStream = new DeflateStream(mStream, CompressionMode.Decompress, true);
                object dsResult = null;
                BinaryFormatter bFormatter = new BinaryFormatter();
                dsResult = (object)bFormatter.Deserialize(unZipStream);
                return dsResult;
            }
            #endregion
      

  3.   

    开源的SharpZipLib还是不错的。