好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

本文实例讲述了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#程序设计有所帮助。

dy("nrwz");

查看更多关于C#实现压缩和解压缩的方法示例【Gzip和Zip方式】的详细内容...

  阅读:45次