当前位置:编程学习 > C#/ASP.NET >>

使用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)));

            \

    
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,