前言

我们在项目中,有可能会遇到存入到数据库或者传输的数据量比较大,这个时候,就可以考虑在存入数据库或者发送传输之前,将数据压缩下,当从数据库中取出时,再解压还原数据。

正文

废话不多说,我封装了一个工具类用于压缩和解压数据,代码如下:

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

参考文档

  1. C# 关于GZipStream压缩与解压缩数据丢失问题

  2. GZipStream 类 (System.IO.Compression)

C#使用GZipStream实现压缩和解压缩的更多相关文章

  1. .net 利用 GZipStream 压缩和解压缩

    1.GZipStream 类 此类在 .NET Framework 2.0 版中是新增的. 提供用于压缩和解压缩流的方法和属性 2.压缩byte[] /// <summary> /// 压 ...

  2. 关于webservice大数据量传输时的压缩和解压缩

    当访问WebSerivice时,如果数据量很大,传输数据时就会很慢.为了提高速度,我们就会想到对数据进行压缩.首先我们来分析一下. 当在webserice中传输数据时,一般都采用Dataset进行数据 ...

  3. C#- 压缩和解压缩的研究 .

    用了第二种方法,感觉很不错,其他都没用过了.摘录下来,做一个备忘. 最近在网上查了一下在.net中进行压缩和解压缩的方法,方法有很多,我找到了以下几种: 1.利用.net自带的压缩和解压缩方法GZip ...

  4. .net中压缩和解压缩的处理

    最近在网上查了一下在.net中进行压缩和解压缩的方法,方法有很多,我找到了以下几种: 1.利用.net自带的压缩和解压缩方法GZip 参考代码如下: //======================= ...

  5. C#压缩和解压缩字节(GZip)

    标题:C#压缩和解压缩字节(GZip的使用) 作用:此类在 .NET Framework 2.0 版中是新增的.提供用于压缩和解压缩流的方法和属性.定义:表示 GZip 数据格式,它使用无损压缩和解压 ...

  6. Linux下的压缩和解压缩命令——gzip/gunzip

    gzip命令 gzip命令用来压缩文件.gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处".gz"扩展名. gzip是在Linux系统中经常使用的一个对文件进行压 ...

  7. Linux常用命令学习3---(文件的压缩和解压缩命令zip unzip tar、关机和重启命令shutdown reboot……)

    1.压缩和解压缩命令    常用压缩格式:.zip..gz..bz2..tar.gz..tar.bz2..rar .zip格式压缩和解压缩命令        zip 压缩文件名 源文件:压缩文件   ...

  8. [Java 基础] 使用java.util.zip包压缩和解压缩文件

    reference :  http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...

  9. 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期

    [源码下载] 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的 ...

  10. IOS开发之网络编程--文件压缩和解压缩

    前言: QQ表情包就用到了解压缩,从网络下载的那么多表情文件格式并不是一个一个图片文件,而是多个图片压缩而成的表情压缩包.下面介绍的是iOS开发中会用到的压缩和解压缩的第三方框架的使用. 注意: 这个 ...

随机推荐

  1. POJ2155 Matrix(二维树状数组||区间修改单点查询)

    Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row an ...

  2. appium 支持输入中文

    加入: desired_caps['unicodeKeyboard'] = True desired_caps['resetKeyboard'] = True 使用输入中文: input_txt = ...

  3. Jasper-template

    ylbtech-Jasper: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtech. ...

  4. Lagom学习(一)

    Lagom是JAVA系下响应式 微服务框架,其特性包括: 目前,大多数已有的微服务框架关注于简化单个微服务的构建,Lagom将其扩展到了微服务所构成的系统,分布式系统的复杂性. 同步通信使用HTTP, ...

  5. #if _MSC_VER > 1000 #pragma once #endif

    #if _MSC_VER > 1000 #pragma once #endif 解释: 这是微软的预编译控制. 在_MSC_VER较小时,它对一些东西的支持与新版不同 _MSC_VER分解如下: ...

  6. 7.10实习培训日志-Maven 敏捷编程

    总结 今天早上主要学习了Maven和Idea的Docker插件,遇到了一些坑,对于Idea的Docker插件,不能下载,然后我去访问Idea插件官网,发现被墙了,只要开个VPN就好.下午主要是张总经理 ...

  7. MFC——4个基本类中的成员函数介绍

    09121852 杜军 机械设计及理论 1. CMainFrame ActivateFrame使框架对用户可视并可用 CalcWindowRect每当主框架窗口的客户区尺寸发生变化或控制条的位置发生变 ...

  8. JS判断上传文件类型

    /*   * 判断图片类型   */    function checkImgType(ths){        if (ths.value == "") {            ...

  9. MVC+NHibernate笔记

    Nhibernate 要求model实体类对于lazy="true" ,字段属性前需要加 virtual sqlserver2005和oracle10g的hibernate.cfg ...

  10. Tyvj P1520 树的直径

    P1520 树的直径 http://www.tyvj.cn/p/1520 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 树的直径,即这棵树中距离最远的两个结 ...