C# CGZipUtil压缩和解压

 1     public class CGZipUtil
 2     {
 3         /// <summary>
 4         /// 解压
 5         /// </summary>
 6         /// <param name="Value"></param>
 7         /// <returns></returns>
 8         public static DataSet GetDatasetByString(StringBuilder Value)
 9         {
10             DataSet ds = new DataSet();
11             string CC = GZipDecompressString(Value);
12             System.IO.StringReader Sr = new StringReader(CC);
13             ds.ReadXml(Sr);
14             return ds;
15         }
16 
17         /// <summary>
18         /// 将传入字符串以GZip算法压缩后,返回Base64编码字符
19         /// </summary>
20         /// <param name="rawString">需要压缩的字符串</param>
21         /// <returns>压缩后的Base64编码的字符串</returns>
22         public static StringBuilder GZipCompressString(StringBuilder rawString)
23         {
24             if (rawString.Length == 0)
25             {
26                 return new StringBuilder("");
27             }
28             else
29             {
30                 byte[] rawData = System.Text.Encoding.UTF8.GetBytes(rawString.ToString());
31                 byte[] zippedData = Compress(rawData);
32                 return new StringBuilder((Convert.ToBase64String(zippedData)));
33             }
34         }
35 
36         /// <summary>
37         /// GZip压缩
38         /// </summary>
39         /// <param name="rawData"></param>
40         /// <returns></returns>
41         static byte[] Compress(byte[] rawData)
42         {
43             MemoryStream ms = new MemoryStream();
44             GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Compress, true);
45             compressedzipStream.Write(rawData, 0, rawData.Length);
46             compressedzipStream.Close();
47             return ms.ToArray();
48         }
49 
50 
51         /// <summary>
52         /// 将传入的二进制字符串资料以GZip算法解压缩
53         /// </summary>
54         /// <param name="zippedString">经GZip压缩后的二进制字符串</param>
55         /// <returns>原始未压缩字符串</returns>
56         public static string GZipDecompressString(StringBuilder zippedString)
57         {
58             if (zippedString == null || zippedString.Length == 0)
59             {
60                 return "";
61             }
62             else
63             {
64                 byte[] zippedData = Convert.FromBase64String(zippedString.ToString());
65                 return (string)(System.Text.Encoding.UTF8.GetString(Decompress(zippedData)));
66             }
67         }
68 
69 
70         /// <summary>
71         /// ZIP解压
72         /// </summary>
73         /// <param name="zippedData"></param>
74         /// <returns></returns>
75         public static byte[] Decompress(byte[] zippedData)
76         {
77             MemoryStream ms = new MemoryStream(zippedData);
78             GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Decompress);
79             MemoryStream outBuffer = new MemoryStream();
80             byte[] block = new byte[1024];
81             while (true)
82             {
83                 int bytesRead = compressedzipStream.Read(block, 0, block.Length);
84                 if (bytesRead <= 0)
85                     break;
86                 else
87                     outBuffer.Write(block, 0, bytesRead);
88             }
89             compressedzipStream.Close();
90             return outBuffer.ToArray();
91         }
92     }
原文地址:https://www.cnblogs.com/CarlBlogs/p/7405575.html