C#使用GZipStream压缩文件介绍

    GZipStream 类提供用于压缩和解压缩流的方法和属性。

 

    此类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法。这种格式包括一个检测数据损坏的循环冗余校验值。GZip 数据格式使用的算法与 DeflateStream 类的算法相同,但它可以扩展以使用其他压缩格式。这种格式可以通过不涉及专利使用权的方式轻松实现。Gzip 的格式可从 RFC 1952 GZIP file format specification 4.3(GZIP 文件格式规范 4.3)中获得。此类不能用于压缩大于 4 GB 的文件。

 

        // 压缩数据
        static Byte[] Compress(Byte[] data)
        {
            // 压缩入这个内存流
            using (MemoryStream target = new MemoryStream())
            {
                using (GZipStream gs = new GZipStream(target, CompressionMode.Compress, true))
                {
                    // 把数据写入压缩流
                    gs.Write(data, 0, data.Length);
                }
                return target.ToArray();
            }
        }
        //解压数据
        static Byte[] DeCompress(Byte[] data)
        {
            using (MemoryStream source = new MemoryStream())
            {
                using (GZipStream gs = new GZipStream(new MemoryStream(data), CompressionMode.Decompress, true))
                {
                    //从压缩流中读出所有数据
                    byte[] bytes = new byte[4096];
                    int n;
                    while ((n = gs.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        source.Write(bytes, 0, n);
                    }
                }
                return source.ToArray();
            }
        }

 

        static string GetTestString()
        {
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < 1000; i++)
                builder.Append("我是测试数据");
            return builder.ToString();
        }

 

            string test = GetTestString();
            Byte[] original = Encoding.Default.GetBytes(test);
            Console.WriteLine("数据的原始长度是:" + original.LongLength.ToString());
            Byte[] compressed = Compress(original);
            Console.WriteLine("压缩后的数据长度是:" + compressed.LongLength);
            Byte[] back = DeCompress(compressed);
            Console.WriteLine("解压后得到数据长度:" + back.LongLength.ToString());
            Console.WriteLine("解压前后是否相等: " + test.Equals(Encoding.Default.GetString(back)));


如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。