zoukankan      html  css  js  c++  java
  • C# GZip对字符串压缩和解压

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

    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();  
            }  
        }  
    }  
  • 相关阅读:
    通过path绘制点击区域
    能添加图标的label
    便利的初始化view以及设置tag值
    递归搜寻NSString中重复的文本
    自动移除的通知中心
    BadgeValueView
    SpringCloud的入门学习之Eureka(Eureka的单节点)
    Elasticsearch 6.x版本全文检索学习之分布式特性介绍
    关于window10更新之后,15.5版本虚拟机不能使用的情况:检测更新版本
    RabbitMQ的消息确认ACK机制
  • 原文地址:https://www.cnblogs.com/yangyangblog/p/9282111.html
Copyright © 2011-2022 走看看