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开发中会用到的压缩和解压缩的第三方框架的使用. 注意: 这个 ...
随机推荐
- 优化EF的性能
Entity Framework的性能优化: 1.使用MergeOption.NoTracking (发现添加这个代码后, 导致"The object cannot be deleted ...
- 五 akka streams kafka
(转载 https://doc.akka.io/docs/akka-stream-kafka/current/home.html) 一: Akka Streams Kafka, also known ...
- Unix Timestamp
class Foundation_API DateTime /// This class represents an instant in time, expressed /// in years, ...
- SVN 被防火墙阻止的解决方法
SVN 被防火墙阻止的解决方法: 1. 进入WIN7的防火墙,看到有的SVN服务是被阻止的,专用的和公用的要设置为允许被防火墙阻止的解决方法" TITLE="SVN 被防火墙阻止的 ...
- Linux 程式減肥(strip & objcopy)(转载)
转自:http://calamaryshop.blogspot.com/2011/11/linux-strip-objcopy.html 對於設計嵌入式Linux系統的研發人員來說,記憶體的空間是非常 ...
- unity3d 自定义载入条/载入动画
在 Assets 下新建文件夹 WebGLTemplates , 在 WebGLTemplates 文件夹下新建文件夹 MyTemplate, 新建index. 在 PlayerSetting 中的 ...
- C#阵列Array排序
五一假期回来,练习一下C#的一些知识,了解一下排序. 练习数据: , , , , , , , , }; 写一个类: using System; using System.Collections.Gen ...
- Swoole HTTP 的应用
目录 概述 代码 小结 扩展 概述 这是关于 Swoole 学习的第四篇文章:Swoole HTTP 的应用. 第三篇:Swoole WebSocket 的应用 第二篇:Swoole Task 的应用 ...
- 关于define
<?php define('local','localhost');//echo constant('local');exit(); define('username','root'); def ...
- Keras输出每一层网络大小
示例代码: model = Model(inputs=self.inpt, outputs=self.net) model.compile(loss='categorical_crossentropy ...