C# GZip对字符串压缩和解压

C# GZip对字符串压缩和解压

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.IO.Compression; 
using System.Data; 
   
namespace HelperProjects 
    public class ZipHelper 
    
        /// <summary> 
        /// 解压 
        /// </summary> 
        /// <param name="Value"></param> 
        /// <returns></returns> 
        public static DataSet GetDatasetByString(string Value) 
        
            DataSet ds = new DataSet(); 
            string CC = GZipDecompressString(Value); 
            System.IO.StringReader Sr = new StringReader(CC); 
            ds.ReadXml(Sr); 
            return ds; 
        
        /// <summary> 
        /// 根据DATASET压缩字符串 
        /// </summary> 
        /// <param name="ds"></param> 
        /// <returns></returns> 
        public static string GetStringByDataset(string ds) 
        
            return GZipCompressString(ds); 
        
       /// <summary> 
       /// 将传入字符串以GZip算法压缩后,返回Base64编码字符 
       /// </summary> 
       /// <param name="rawString">需要压缩的字符串</param> 
       /// <returns>压缩后的Base64编码的字符串</returns> 
        public static string GZipCompressString(string rawString) 
        
            if (string.IsNullOrEmpty(rawString) || rawString.Length == 0) 
            
                return ""
            
            else 
            
                byte[] rawData = System.Text.Encoding.UTF8.GetBytes(rawString.ToString()); 
                byte[] zippedData = Compress(rawData); 
                return (string)(Convert.ToBase64String(zippedData)); 
            
   
        
        /// <summary> 
        /// GZip压缩 
        /// </summary> 
        /// <param name="rawData"></param> 
        /// <returns></returns> 
        public static byte[] Compress(byte[] rawData) 
        
            MemoryStream ms = new MemoryStream(); 
            GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Compress, true); 
            compressedzipStream.Write(rawData, 0, rawData.Length); 
            compressedzipStream.Close(); 
            return ms.ToArray(); 
        
        /// <summary> 
        /// 将传入的二进制字符串资料以GZip算法解压缩 
        /// </summary> 
        /// <param name="zippedString">经GZip压缩后的二进制字符串</param> 
        /// <returns>原始未压缩字符串</returns> 
        public static string GZipDecompressString(string zippedString) 
        
            if (string.IsNullOrEmpty(zippedString) || zippedString.Length == 0) 
            
                return ""
            
            else 
            
                byte[] zippedData = Convert.FromBase64String(zippedString.ToString()); 
                return (string)(System.Text.Encoding.UTF8.GetString(Decompress(zippedData))); 
            
        
        /// <summary> 
        /// ZIP解压 
        /// </summary> 
        /// <param name="zippedData"></param> 
        /// <returns></returns> 
        public static byte[] Decompress(byte[] zippedData) 
        
            MemoryStream ms = new MemoryStream(zippedData); 
            GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Decompress); 
            MemoryStream outBuffer = new MemoryStream(); 
            byte[] block = new byte[1024]; 
            while (true
            
                int bytesRead = compressedzipStream.Read(block, 0, block.Length); 
                if (bytesRead <= 0) 
                    break
                else 
                    outBuffer.Write(block, 0, bytesRead); 
            
            compressedzipStream.Close(); 
            return outBuffer.ToArray(); 
        
    
}  
posted @   yangyang1900  阅读(257)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示