/// public static string Compr">
 | 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
m47c
10年前发布

C# 压缩和解压缩(Gzip和Zip的方式)

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