C#使用GZipStream实现压缩和解压缩
前言
我们在项目中,有可能会遇到存入到数据库或者传输的数据量比较大,这个时候,就可以考虑在存入数据库或者发送传输之前,将数据压缩下,当从数据库中取出时,再解压还原数据。
正文
废话不多说,我封装了一个工具类用于压缩和解压数据,代码如下:
using System;
using System.IO;
using System.IO.Compression;
using System.Text; namespace Test
{
public class GZipUtils
{
/// <summary>
/// 压缩指定字符串
/// </summary>
/// <param name="str">待压缩字符串</param>
/// <returns>返回压缩后的字节数组</returns>
public static byte[] Compress(string str)
{
if (string.IsNullOrEmpty(str)) return null; byte[] bytes = Encoding.UTF8.GetBytes(str);
return Compress(bytes);
} /// <summary>
/// 压缩指定字节数组
/// </summary>
/// <param name="bytes">待压缩字节数组</param>
/// <returns>返回压缩后的字节数组</returns>
public static byte[] Compress(byte[] bytes)
{
if (bytes == null || bytes.Length <= ) return bytes; using (var compressedStream = new MemoryStream())
{
using (var compressionStream = new GZipStream(compressedStream, CompressionMode.Compress))
{
compressionStream.Write(bytes, , bytes.Length);
}
return compressedStream.ToArray();
}
} /// <summary>
/// 压缩指定字符串到指定文件中
/// </summary>
/// <param name="compressData">待压缩字符串</param>
/// <param name="zipFilePath">压缩后的文件路径</param>
public static void CompressToFile(string compressData, string zipFilePath)
{
if (!string.IsNullOrEmpty(compressData))
{
byte[] bytes = Encoding.UTF8.GetBytes(compressData);
using (var originalStream = new MemoryStream(bytes))
{
using (FileStream compressedStream = File.Create(zipFilePath))
{
using (GZipStream compressionStream = new GZipStream(compressedStream, CompressionMode.Compress))
{
originalStream.CopyTo(compressionStream);
}
}
}
}
} /// <summary>
/// 从指定字节数组解压出字符串
/// </summary>
/// <param name="bytes">待解压的字节数组</param>
/// <returns>返回解压后的字符串</returns>
public static string DecompressToString(byte[] bytes)
{
var result = Decompress(bytes);
if (result == null || result.Length <= ) return string.Empty; return Encoding.UTF8.GetString(result);
} /// <summary>
/// 从指定字节数组解压出字节数组
/// </summary>
/// <param name="bytes">待解压的字节数组</param>
/// <returns>返回解压后的字节数组</returns>
public static byte[] Decompress(byte[] bytes)
{
if (bytes == null || bytes.Length <= ) return bytes; using (var originalStream = new MemoryStream(bytes))
{
using (var decompressedStream = new MemoryStream())
{
using (var decompressionStream = new GZipStream(originalStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedStream);
}
return decompressedStream.ToArray();
}
}
} /// <summary>
/// 从指定文件中解压出字符串
/// </summary>
/// <param name="zipFilePath">待解压的文件路径</param>
/// <returns>返回解压后的字符串</returns>
public static string DecompressFromFile(string zipFilePath)
{
if (File.Exists(zipFilePath))
{
using (FileStream originalStream = File.Open(zipFilePath, FileMode.Open))
{
using (MemoryStream decompressedStream = new MemoryStream())
{
using (GZipStream decompressionStream = new GZipStream(originalStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedStream);
}
byte[] bytes = decompressedStream.ToArray();
return Encoding.UTF8.GetString(bytes);
}
}
}
return string.Empty;
}
}
}
参考文档
C#使用GZipStream实现压缩和解压缩的更多相关文章
- .net 利用 GZipStream 压缩和解压缩
1.GZipStream 类 此类在 .NET Framework 2.0 版中是新增的. 提供用于压缩和解压缩流的方法和属性 2.压缩byte[] /// <summary> /// 压 ...
- 关于webservice大数据量传输时的压缩和解压缩
当访问WebSerivice时,如果数据量很大,传输数据时就会很慢.为了提高速度,我们就会想到对数据进行压缩.首先我们来分析一下. 当在webserice中传输数据时,一般都采用Dataset进行数据 ...
- C#- 压缩和解压缩的研究 .
用了第二种方法,感觉很不错,其他都没用过了.摘录下来,做一个备忘. 最近在网上查了一下在.net中进行压缩和解压缩的方法,方法有很多,我找到了以下几种: 1.利用.net自带的压缩和解压缩方法GZip ...
- .net中压缩和解压缩的处理
最近在网上查了一下在.net中进行压缩和解压缩的方法,方法有很多,我找到了以下几种: 1.利用.net自带的压缩和解压缩方法GZip 参考代码如下: //======================= ...
- C#压缩和解压缩字节(GZip)
标题:C#压缩和解压缩字节(GZip的使用) 作用:此类在 .NET Framework 2.0 版中是新增的.提供用于压缩和解压缩流的方法和属性.定义:表示 GZip 数据格式,它使用无损压缩和解压 ...
- Linux下的压缩和解压缩命令——gzip/gunzip
gzip命令 gzip命令用来压缩文件.gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处".gz"扩展名. gzip是在Linux系统中经常使用的一个对文件进行压 ...
- Linux常用命令学习3---(文件的压缩和解压缩命令zip unzip tar、关机和重启命令shutdown reboot……)
1.压缩和解压缩命令 常用压缩格式:.zip..gz..bz2..tar.gz..tar.bz2..rar .zip格式压缩和解压缩命令 zip 压缩文件名 源文件:压缩文件 ...
- [Java 基础] 使用java.util.zip包压缩和解压缩文件
reference : http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...
- 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期
[源码下载] 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的 ...
- IOS开发之网络编程--文件压缩和解压缩
前言: QQ表情包就用到了解压缩,从网络下载的那么多表情文件格式并不是一个一个图片文件,而是多个图片压缩而成的表情压缩包.下面介绍的是iOS开发中会用到的压缩和解压缩的第三方框架的使用. 注意: 这个 ...
随机推荐
- Vue 中数据流组件
好久不见呀,这两年写了很多很多东西,也学到很多很多东西,没有时常分享是因为大多都是我独自思考.明年我想出去与更多的大神交流,再修筑自己构建的内容. 有时候我会想:我们遇到的问题,碰到的界限,是别人给的 ...
- Mac使用记录
---恢复内容开始--- brew list //查看brew安装东东 ls //当前目录下内容 brew --cache //查看brew下载目录 /usr/local/Cellar/ //隐藏文件 ...
- TCP 协议的消息
TCP: SYN ACK FIN RST PSH URG 详解 TCP的三次握手是怎么进行的了:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手:接收端收到请求并 ...
- matlab在处理图像时为什么把数据转换为double型?
1 有些函数支持double型,而不支持uint8的数据类型,所以要转换 2 精度问题了,因为uint8进行数据处理的时候,容易造成数据溢出或精度不够. 为了节省存储空间,matlab为图像提供了特殊 ...
- Word直接发表博客测试
这是我现在使用的VSCode! 这是另一段测试内容!
- SQL DBA 学习
http://www.cnblogs.com/CareySon/category/389500.html SQL Pass(13) SQL SERVER(42) SQL Server DBA生涯(1) ...
- 学习总结:斯特林数( Stirling number )
基本定义 第一类斯特林数:$1 \dots n$的排列中恰好有$k$个环的个数:或是,$n$元置换可分解为$k$个独立的轮换的个数.记作 $$ \begin{bmatrix} n \\ k \end{ ...
- VS13+OPCV2.4.11
转载:http://blog.csdn.net/a934270082/article/details/50843266?locationNum=3&fps=1 1. 配置系统环境变量:计算机 ...
- socket函数的使用方法(参数详解)
socket函数的使用方法如下: int socket(int domain, int type, int protocol); 在参数表中,domain指定使用何种的地址类型,比较常用的有: PF_ ...
- DataGridView DataSource INotifyPropertyChanged 避免闪烁的方法
代码说话: dgvPosition就是需要避免闪烁的DataGridView 主要是加2段代码 1.SetStyle 2.datagridview设置DoubleBuffered属性为True pub ...