首页 > 编程 > C# > 正文

C#实现压缩和解压缩的方法示例【Gzip和Zip方式】

2019-10-29 21:09:44
字体:
来源:转载
供稿:网友

本文实例讲述了C#实现压缩和解压缩的方法。分享给大家供大家参考,具体如下:

使用ICSharpCode.SharpZipLib.dll来压缩/解压(压缩效率比GZip要高一点)

public static class ZipUtil{    /// <summary>    /// 压缩    /// </summary>    /// <param name="param"></param>    /// <returns></returns>    public static string Compress(string param)    {      byte[] data = System.Text.Encoding.UTF8.GetBytes(param);      //byte[] data = Convert.FromBase64String(param);      MemoryStream ms = new MemoryStream();      Stream stream = new ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream(ms);      try      {        stream.Write(data, 0, data.Length);      }      finally      {        stream.Close();        ms.Close();      }      return Convert.ToBase64String(ms.ToArray());    }    /// <summary>    /// 解压    /// </summary>    /// <param name="param"></param>    /// <returns></returns>    public static string Decompress(string param)    {      string commonString = "";      byte[] buffer = Convert.FromBase64String(param);      MemoryStream ms = new MemoryStream(buffer);      Stream sm = new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(ms);      //这里要指明要读入的格式,要不就有乱码      StreamReader reader = new StreamReader(sm, System.Text.Encoding.UTF8);      try      {        commonString = reader.ReadToEnd();      }      finally      {        sm.Close();        ms.Close();      }      return commonString;    }}

使用GZip来压缩/解压缩(字符串)

public static class GZipUtil{    public static string Zip(string value)    {      //Transform string into byte[]      byte[] byteArray = new byte[value.Length];      int indexBA = 0;      foreach (char item in value.ToCharArray())      {        byteArray[indexBA++] = (byte)item;      }      //Prepare for compress      System.IO.MemoryStream ms = new System.IO.MemoryStream();      System.IO.Compression.GZipStream sw = new System.IO.Compression.GZipStream(ms,        System.IO.Compression.CompressionMode.Compress);      //Compress      sw.Write(byteArray, 0, byteArray.Length);      //Close, DO NOT FLUSH cause bytes will go missing...      sw.Close();      //Transform byte[] zip data to string      byteArray = ms.ToArray();      System.Text.StringBuilder sB = new System.Text.StringBuilder(byteArray.Length);      foreach (byte item in byteArray)      {        sB.Append((char)item);      }      ms.Close();      sw.Dispose();      ms.Dispose();      return sB.ToString();    }    public static string UnZip(string value)    {      //Transform string into byte[]      byte[] byteArray = new byte[value.Length];      int indexBA = 0;      foreach (char item in value.ToCharArray())      {        byteArray[indexBA++] = (byte)item;      }      //Prepare for decompress      System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArray);      System.IO.Compression.GZipStream sr = new System.IO.Compression.GZipStream(ms,        System.IO.Compression.CompressionMode.Decompress);      //Reset variable to collect uncompressed result      byteArray = new byte[byteArray.Length];      //Decompress      int rByte = sr.Read(byteArray, 0, byteArray.Length);      //Transform byte[] unzip data to string      System.Text.StringBuilder sB = new System.Text.StringBuilder(rByte);      //Read the number of bytes GZipStream red and do not a for each bytes in      //resultByteArray;      for (int i = 0; i < rByte; i++)      {        sB.Append((char)byteArray[i]);      }      sr.Close();      ms.Close();      sr.Dispose();      ms.Dispose();      return sB.ToString();    }}

希望本文所述对大家C#程序设计有所帮助。


注:相关教程知识阅读请移步到c#教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表