使用GZipStream实现压缩和解压缩

概述

之前做项目,涉及到存入到数据库或者http传输的数据量比较大,这个时候,就需要考虑在存入数据库或者发送传输之前,将数据压缩下,当从数据库中取出时,再解压还原数据。特地找了下发现有GZipStream可以实现这个功能。此类表示gzip数据格式,该格式使用行业标准算法进行无损文件压缩和解压缩。该格式包括用于检测数据损坏的循环冗余校验值。gzip数据格式使用与DeflateStream类相同的算法,但可以扩展为使用其他压缩格式。该格式很容易以专利未涵盖的方式实施。从.NET Framework 4.5开始,DeflateStream类使用zlib库进行压缩。因此,与.NET Framework的早期版本相比,它提供了更好的压缩算法,并且在大多数情况下,提供了较小的压缩文件。

GZipStream使用的一般流程如下:

打开一个现有的文件

打开/创建输出文件

创建GZipStream对象

逐字节读源文件,并把它传递到GZipStream

使用GZipStream写入到输出文件流

代码实现

1、压缩字符串

 /// <summary>/// 壓縮字串,回傳 Base64 結果/// </summary>/// <param name="text"></param>/// <returns></returns>public static string ZipText(string text){byte[] inputBytes = Encoding.UTF8.GetBytes(text);return ZipText(inputBytes);}public static string ZipText(byte[] inputBytes){using (MemoryStream outputStream = new MemoryStream()){using (GZipStream gs = new GZipStream(outputStream, CompressionMode.Compress)){gs.Write(inputBytes, 0, inputBytes.Length);}byte[] outputBytes = outputStream.ToArray();string result = Convert.ToBase64String(outputBytes);return result;}}

2、解压缩字符串

  /// <summary>/// 解壓縮字串/// </summary>/// <param name="zippedText"></param>/// <returns></returns>public static string UnzipZippedText(string zippedText){if (String.IsNullOrEmpty(zippedText)){return String.Empty;}string unzipedText = null;try{byte[] buffer = Convert.FromBase64String(zippedText);MemoryStream ms = new MemoryStream(buffer);GZipStream zipStream = new GZipStream(ms, CompressionMode.Decompress);using (StreamReader streamReader = new StreamReader(zipStream)){unzipedText = streamReader.ReadToEnd();}}catch (Exception ex){unzipedText = String.Empty;}return unzipedText;}

运行结果测试,源文件经过压缩大小只有120字节,而解压后,源文件与解压后txt的大小一致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 核显驱动程序,支持下代核显 Intel放出Linux图形驱动

【IT168 资讯】虽然Ivy Bridge处理器的发布因为策略原因被推迟到2012年3-4月份&#xff0c;但是Intel在硬件、软件的开发上进展颇为顺利&#xff0c;近日还放出了新款Linux开源图形驱动&#xff0c;已然支持Ivy Bridge中的整合图形核心。▲Intel新款Linux开源图形驱动Chris Wil…

看完此文再不懂区块链算我输:手把手教你用Python从零开始创建区块链

导读&#xff1a;如果你还没有听说过 3 点钟区块链群&#xff0c;说明你还不是链圈的人&#xff1b;如果你还没有加入 3 点钟区块链群&#xff0c;说明你还不是链圈的大佬&#xff1b;如果你还没有被 3 点钟区块链群刷屏&#xff0c;说明你还体会不到什么是“币圈一天&#xff…

过于在意别人的看法,怎么办?

大家好&#xff0c;我是Z哥。你有特别在意别人的看法吗&#xff1f;如果从别人那里听到对自己不好的评价会不会导致一整天都闷闷不乐&#xff0c;做事都没心思&#xff1f;如果从别人那里听到对自己好的评价会不会做起事来都像打了鸡血一样&#xff1f;我相信每个人都会在意别人…

linux 虚拟机挂载本地,CentOS 在VMWare中挂载本地yum源

准备工作虚拟机 VMWare系统 CentOS 7 镜像一、挂载镜像操作之前点击 虚拟机设置 CD/DVD处勾选 设备状态[x] 已连接[x] 启动时连接挂载镜像mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom二、创建yum配置mv /etc/yum.repos.d /etc/yum.repos.d.back mkdir /etc/yum.repos.d三、创…

干货整理:处理不平衡数据的技巧总结!收好不谢

文&#xff1a;Rick Radewagen译&#xff1a;李萌在银行欺诈检测&#xff0c;市场实时竞价或网络入侵检测等领域通常是什么样的数据集呢&#xff1f;在这些领域使用的数据通常有不到1&#xff05;少量但“有趣的”事件&#xff0c;例如欺诈者利用信用卡&#xff0c;用户点击广告…

MongoDB,凉凉?

英国《卫报》正式告别 MongoDB&#xff0c;完成了向 PostgreSQL 的迁移&#xff1b;RedHat 移除 MongoDB&#xff0c;Fedora、Debian 亦在其列&#xff1b;再加上前不久刚因程序员爬虫而扣上的一口 2 亿简历泄露的安全事故大黑锅——比起 “Hello World”&#xff0c;一只脚刚踏…

linux ubuntu 开启ssh服务,开启SSH服务远程登录ubuntu

Ubuntu系统(14.04 LTS)ssh–secure shell&#xff0c;提供安全的远程登录。从事嵌入式开发搭建linux开发环境中&#xff0c;ssh的服务的安装是其中必不可少的一步。ssh方便一个开发小组中人员登录一台服务器&#xff0c;从事代码的编写、编译、运行。方便代码的共享及管理。ssh…

兄dei,Python数据竞赛和5万现金奖励了解一下

“少年&#xff0c;我看你骨骼精奇&#xff0c;是万中无一的技术奇才&#xff0c;维护世界和平就靠你了&#xff0c;我这有一个拯救世界的机会&#xff08;还有50000大奖&#xff0c;美滋滋……&#xff09;&#xff0c;见与你有缘就免费告诉你了&#xff01;”剧情是这样展开的…

聊聊自驱团队的构建(四)

本文聊聊一个议题&#xff0c;构建知识型组织。1 背景研发团队最重要的一件事莫过于重视知识工作的开展了&#xff0c;尤其是以.NET为主要技术栈的企业&#xff0c;随着招人成本的不断提高&#xff0c;依托团队组织建立的知识型队伍&#xff0c;定期开展培训&#xff0c;促进团…

别再提程序员应届年薪20万了,人工智能已经年薪60万了!

对人工智能而言&#xff0c;2017是不平凡的一年&#xff1a;AlphaGo再胜人类腾讯宣布进军AI百度无人驾驶汽车上五环AI教育要从娃娃抓起寒武纪成全球AI芯片首个独角兽阿里巴巴成立达摩院类人机器人Sophia首获公民身份国家正式公布人工智能四大平台..........近年来&#xff0c;人…

动手造轮子:实现一个简单的基于 Console 的日志输出

动手造轮子&#xff1a;实现一个简单的基于 Console 的日志输出Intro之前结合了微软的 Logging 框架和 Serilog 写了一个简单的日志框架&#xff0c;但是之前的用法都是基于 log4net、serilog 的&#xff0c;没有真正自己实现一个日志输出&#xff0c;比如 Console、文件、数据…

Windows Phone 7Silverlight控件之--Panorama

Silverlight for Windows Phone 7的Pivot、Panorama控件是一个类似于Android应用程序列表中可以翻页控件&#xff0c;具有如下特点 1.简单的XAML和编程接口 2.完全支持数据绑定、内容模板属性和项目容器样式 3.内置黑、白两种皮肤样式 4.内置触控导航&#xff0c;可以让用户快速…

linux 往文件写4k大小,[svc]为何linux ext4文件系统目录默认大小是4k?

linux ext4普通盘为什么目录大小是4k?Why does every directory have a size 4096 bytes (4 K)?To understand this, youd better have some basic knowledge of the following (file system):inode (contains file attributes, metadata of file, pointer structure)file (c…

3月份GitHub上最热门的开源项目

本篇文章为大家盘点了3月份GitHub最热门的开源项目&#xff0c;一起来看看你都知道哪些&#xff0c;或者有哪些你已经在使用的了。1Interview-Notebookhttps://github.com/CyC2018/Interview-Notebook Star 11975此项目是作者在准备 2018 年春招实习过程中的学习总结&#xff0…

linux sed 空间模式,整理:SED的模式空间与缓冲区及n,N,d,D,p,P,h,H,g,G,x解析...

sed命令n&#xff0c;N&#xff0c;d&#xff0c;D&#xff0c;p&#xff0c;P&#xff0c;h&#xff0c;H&#xff0c;g&#xff0c;G&#xff0c;x解析1、sed执行模板sed ‘模式{命令1;命令2}’ 即逐行读入模式空间&#xff0c;执行命令&#xff0c;最后输出打印出来2、p打印…

你碰到过的最难调试的 Bug 是什么样的?

我们做开发的应该都会有深刻的体会&#xff0c;有时候会遇到一些莫名奇妙的BUG不知所措&#xff0c;解决BUG到近乎崩溃&#xff0c;更有甚者有人居然会在梦中解决掉BUG。下面我们看几个有意思的解决Bug的故事&#xff1a;知乎网友李幼萌&#xff1a;08年的时候&#xff0c;我所…

云原生 | 阿里巴巴的Dapr实践与探索

【Dapr】| 原文/敖小剑&#xff0c;翻译/Edison本文原文来自Dapr Blog&#xff0c;作者阿里云高级技术专家敖小剑。本文是我根据自己的理解翻译了其中的一部分并加了一些参考文献中的内容&#xff0c;所以并非完整翻译&#xff0c;点击本文底部“阅读原文”即可阅读原版英文全文…

阿里25k招.NET,要求WPF!

说到WPF、上位机&#xff0c;很多.NET开发者可能只是听过并不了解&#xff0c;然而随着工业4.0的火爆大势&#xff0c;当下.NET开发者又多了一个高薪选型&#xff0c;在各大招聘网站上都能找到5年经验25k左右的岗位&#xff0c;近日阿里对.NET的招聘&#xff0c;明确就要求的WP…

我们计划招收300名学员,免费攻读人工智能专业

给大家看一份最新的数据&#xff1a;&#xff08;薪资表&#xff09;2018年最新数据&#xff1a;python、大数据、人工智能从业者工资为什么人工智能行业的工资那么高&#xff1f;无论是科研院所&#xff0c;商业巨头还是初创企业&#xff0c;各行各业都在大力开发或者引进人工…

一日一技:ASP.NET Core 判断请求是否为Ajax请求

概述在写后台程序时&#xff0c;有时候需要知道客户端发送的是普通的请求&#xff0c;还是ajax 请求&#xff0c;最近在做项目的时候&#xff0c;有些地方需要判断当前的请求是不是ajax。特地找了下发现&#xff0c;jQuery 发出 ajax 请求时&#xff0c;会在请求头部添加一个名…