技术探索

C#中基于DeflateStream的压缩与解压缩实现方法

2015-04-23
648

利用本文的方法,可以对任意对象进行压缩与解压缩。

 

 

using System.IO;
using System.IO.Compression;


/// <summary>
/// 将数据压缩,并输出为 Base64String 格式。
/// </summary>
/// <param name="data">原始数据。</param>
private string Compress(byte[] data)
{
    using (MemoryStream ms = new MemoryStream(data))
    {
        ms.Position = 0;
        using (MemoryStream ms2 = new MemoryStream())
        {
            using (DeflateStream df = new DeflateStream(ms2, CompressionMode.Compress))
            {
                byte[] buffer = new byte[4096];
                int len = 0;
                while ((len = ms.Read(buffer, 0, buffer.Length)) > 0) df.Write(buffer, 0, len);
            }
            return Convert.ToBase64String(ms2.ToArray());
        }
    }
}

 

 

using System.IO;
using System.IO.Compression;


/// <summary>
/// 将经过压缩并保存为 Base64String 格式的字符串解压。
/// </summary>
/// <param name="base64String">经过压缩的 Base64String。</param>
private byte[] Decompress(string base64String)
{
    using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(base64String)))
    {
        ms.Position = 0;
        using (MemoryStream ms2 = new MemoryStream())
        {
            using (DeflateStream df = new DeflateStream(ms, CompressionMode.Decompress))
            {
                byte[] buffer = new byte[4096];
                int len = 0;
                while ((len = df.Read(buffer, 0, buffer.Length)) > 0) ms2.Write(buffer, 0, len);
            }
            return ms2.ToArray();
        }
    }
}