当前位置: 首页 > news >正文

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

相关文章:

  • Jsp联接Access数据库文件的方法
  • 中国教育“绞肉机”
  • 在指定范围内 生成随机序列算法(可用于洗牌算法)
  • 不用‘/’ 实现除法运算
  • HTML5中的 querySelector
  • js中json的序列化和反序列化
  • 娱乐:输出π的前781位
  • Windows编程模型与API调用示例
  • UltraWebGrid禁止编辑单元格
  • winApi一日一练之 SetTextColor (和Textout)函数
  • 网页自动满屏
  • winApi一日一练之 CreateSolidBrush(和FillRect)
  • 非常抱歉,非常感谢——反省与感恩——企业文化不可缺少的两大内核
  • DOTA 快捷键助手
  • locale问题
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Docker入门(二) - Dockerfile
  • Joomla 2.x, 3.x useful code cheatsheet
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • ng6--错误信息小结(持续更新)
  • node和express搭建代理服务器(源码)
  • supervisor 永不挂掉的进程 安装以及使用
  • Swift 中的尾递归和蹦床
  • Wamp集成环境 添加PHP的新版本
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 工作中总结前端开发流程--vue项目
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 码农张的Bug人生 - 初来乍到
  • 前端面试总结(at, md)
  • 前端相关框架总和
  • 学习笔记TF060:图像语音结合,看图说话
  • 走向全栈之MongoDB的使用
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​用户画像从0到100的构建思路
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (java)关于Thread的挂起和恢复
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (论文阅读30/100)Convolutional Pose Machines
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)linux下的时间函数使用
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET Core中Emit的使用
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • []Telit UC864E 拨号上网
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [acwing周赛复盘] 第 69 场周赛20220917