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

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
使用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();  
            }  
        }  

标签: isp

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇: 二分查找法 C#实现

下一篇:C#线程池的代码