前言

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

正文

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

 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. Spring笔记04(DI(给属性赋值),自动装配(autowire))

    给不同数据类型注入值: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...

  2. poj1733 Parity game[带权并查集or扩展域]

    地址 连通性判定问题.(具体参考lyd并查集专题该题的转化方法,反正我菜我没想出来).转化后就是一个经典的并查集问题了. 带权:要求两点奇偶性不同,即连边权为1,否则为0,压缩路径时不断异或,可以通过 ...

  3. Python 中的 classmethod 和 staticmethod 有什么具体用途?

    作者:李保银链接:https://www.zhihu.com/question/20021164/answer/18224953来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  4. 开发商应用被App Store拒绝的79个原因

    转自:http://www.gamelook.com.cn/2014/10/186017 作为iOS开发者,估计有很多都遇到过APP提交到App Store被拒,然后这些被拒的原因多种多样,今天小编收 ...

  5. caffe Dtype

    http://blog.luoyetx.com/2015/10/reading-caffe-2/

  6. Collection与Map总结

    顺序表和链表统称为线性表:顺序表一般表现为数组,如:ArrayList的实现;链表有单链表.双链表.循环链表的区分,如:LinkedArrayList由双链表+哈希表实现

  7. linux下安装mysql的三种方法:rpm包安装、yum安装、源码包安装

    1 安装MySQL数据库服务器安装方法一://查询系统自带的数据库rpm -qa | grep -i mysql //卸载查询到的所有mysqlrpm -e --nodeps mysql-libs-5 ...

  8. jquery中的$.ajax()的源码分析

    针对获取到location.href的兼容代码: try { ajaxLocation = location.href; } catch( e ) { // Use the href attribut ...

  9. Socket()与WSASocket()的区别

    socket()   创建一个通讯端点并返回一个套接口.但是在socket库中例程在应用于阻塞套接口时会阻塞.     WSASocket()的发送操作和接收操作都可以被重叠使用.接收函数可以被多次调 ...

  10. JavaScript 数据访问(通译自High Performance Javascript 第二章) [转]

    JavaScript 数据访问(通译自High Performance Javascript 第二章)   JavaScript 数据访问(翻译自High Performance Javascript ...