最近在开发一个网站doc.115sou.com,使用到了GZip压缩技术,经过多次搜索找到asp.net中用GZip对数据压缩和解压缩非常方便,当我第一次拿到这个类的时候却感觉很迷茫,无从下手。主要是因为GZipStream的构造函数中第一个需要传入一个Stream,第二个是指定操作方式:压缩还是解压缩。

当时的疑问点主要有:

  1. 我传入的Stream是包含未压缩数据的Stream吗?
  2. 我解压时是从一个压缩流中读取数据后再用GZipStream解压吗?

出现以上两点疑问,完全是我将GZipStream的用法理解反了。

其实GZipStream里面存的是已经压缩过的数据流,传入的Stream是作为基础Stream传入,如果要压缩,那你就可以传一个空的Stream进去,如果要解压,就将包含压缩数据的Stream传进去。

而GZipStream的读和写分别对应的是解压和压缩两个操作,知道了这些,使用起来就简单了。

写入的数据会被压缩后写入到传入的Stream中,读取的数据也是解压后的数据,可以直接写入到一个新的流中。

byte[] cbytes = null;
//压缩using (MemoryStream cms = new MemoryStream()){using (System.IO.Compression.GZipStream gzip = new System.IO.Compression.GZipStream(cms,System.IO.Compression.CompressionMode.Compress)){//将数据写入基础流,同时会被压缩byte[] bytes = Encoding.UTF8.GetBytes("解压缩测试");gzip.Write(bytes, 0, bytes.Length);}cbytes = cms.ToArray();}
//解压using (MemoryStream dms = new MemoryStream()){using (MemoryStream cms = new MemoryStream(cbytes)){using (System.IO.Compression.GZipStream gzip = new System.IO.Compression.GZipStream(cms, System.IO.Compression.CompressionMode.Decompress)){byte[] bytes = new byte[1024];int len = 0;//读取压缩流,同时会被解压while ((len = gzip.Read(bytes, 0, bytes.Length)) > 0){dms.Write(bytes, 0, len);}}}Console.WriteLine(Encoding.UTF8.GetString(dms.ToArray()));}

转载于:https://www.cnblogs.com/webapi/p/4364841.html

asp.net实现GZip压缩和GZip解压相关推荐

  1. Nginx开启Gzip压缩配置详解

    Nginx开启Gzip压缩配置详解 最近生产上发生了一些问题,原先所有的静态资源文件都是经过gzip压缩的,然而这几天突然都没有压缩了,经过一顿排查,发现是Nginx的配置有问题,借此机会详细了解了N ...

  2. linux gzip 解压 函数,获取http的gzip内容,并解压

    问题: 入问题,问题答案立即呈现在您眼前! 寻找gzip 获取一个网页数据返回的编码类型是gzip,我该怎么解压缩 HTTP头获取? 如何用vb获取网络上的xml文件,并解析内容 关于GZIP的解码 ...

  3. python gzip压缩_Python gzip –压缩解压缩

    python gzip压缩 Python gzip module provides a very simple way to compress and decompress files and wor ...

  4. linux apache gzip压缩,Linux入门教程:配置Apache开启gzip压缩传输,gzip压缩 LoadModul

    Linux入门教程:配置Apache开启gzip压缩传输,gzip压缩 LoadModul 开启模块 打开httpd.conf后,先将下面两行配置前面的#号去掉,这样apache就会启用这两个模块,其 ...

  5. linux下tar gz bz2 tgz z等众多压缩文件的解压方法

    对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕.别个不说,单单就压缩文件为例,我们知道在Windows下最常见 的压缩文件就只有两种,一是,zip,另一个是.rar. ...

  6. Linux下打包压缩war、解压war包和jar命令

    环境 RedHat Linux 9 + VWWare 8.0 + SSH 3.2.9 + Putty 0.62 问题 Linux下打包压缩war.解压war包和jar命令 解决 把project_a文 ...

  7. linux解压文件卡住,Linux系统下常见的压缩文件及解压方法

    如果tar不支持j这个参数就先用 bzip2 -d xxx.tar.bz2 把它解压成.tar文件,然后再用 tar xvf xxx.tar 拆包. 压缩解压 linux下怎么解后缀名是gzip的文件 ...

  8. linux xz 解压initrd.img,initrd.img的压缩(制作)及解压的过程

    一.启动镜像initrd.img 文件 类RedHat 系统从vmlinuz 核心引导后,会读取initrd.img 启动镜像.该文件中包含驱动模块等信息,是非常重要的文件.不同版本使用的格式不同. ...

  9. Linux 各种压缩类型文件 解压命令 整理 tar.bz2 tar.gz tgz等等

    *.tar 使用 tar –xvf 解压 *.tar.gz和*.tgz 使用 tar –zxvf 解压 *.gz 使用 gzip -d或者gunzip 解压 *.bz2 使用 bzip2 -d 或者 ...

  10. 【华为机试真题 C++】一种字符串压缩表示的解压-100

    [编程题目 |100分]一种字符串压缩表示的解压[2021 H2, 2022 Q1考试题] 时间限制:C/C++ 1秒,其他语言 2秒 空间限制:C/C++262144K,其他语言524288K 64 ...

最新文章

  1. 零基础学Python(第五章 运算符)
  2. Unity引擎及编辑器C#源代码发布
  3. MySQL中字符串函数详细介绍
  4. 使用Docker快速搭建FTP服务器
  5. C语言课后习题(61)
  6. 十字路口待转区什么用_都知道“左转待转区”,但到底该怎么走?老司机给你一次讲清楚...
  7. 从zabbix的数据库获取数据
  8. 11.C 语言连接 MySQL
  9. C#面向过程之编译原理、变量、运算符
  10. BackgroundWorker 简单使用教程 多个线程的创建
  11. 【预测模型】基于VMD结合Elman神经网络预测数据matlab代码
  12. vue相关插件及框架全家桶
  13. c语言中文网qq,c语言写的qq连看辅助
  14. 中恒建模助手插件和绿色建筑的完美结合
  15. linux centos如何切换时区,如何在CentOS服务器上更改时区?
  16. nc 自开节点做参照_NC6period;3常见问题记录
  17. 《OpenSSL3.0学习之七 OpenSSL FIPS 提供程序|CSDN创作打卡》
  18. pci规划的三个原则_LTE中PCI规划目的和原则
  19. php文本框添加表情,仿微信在对话框文字中插入Emoji表情包
  20. 轮滑运动相关html网页,轮滑运动进校园

热门文章

  1. JUnit单元测试中多线程的坑
  2. 一致性哈希算法在分布式缓存中的应用
  3. JVM_03 运行时数据区[ 堆 ]
  4. 开机启动脚本/etc/init.d/rcS
  5. 《流畅的python》学习日志----装饰器工厂函数
  6. Java包装类、拆箱和装箱详解
  7. 【译】Making Sense of Ethereum’s Layer 2 Scaling Solutions: State Channels, Plasma, and Truebit
  8. DeepBrain 李传丰:当语义技能商店应用达到百万量级的时候,语音交互时代才会真正成熟 | WARE 2017
  9. Android application 中使用 provided aar 并没有那么简单
  10. Mastering Android NDK Build System - Part 1: Techniques with ndk-build