Compression Helper Class using SharpZipLib
使用 SharpZipLib 进行压缩的辅助类,简化压缩字节数组和字符串的操作。
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.BZip2;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Zip;
namespace Compression
{
/**//// <summary>
/// 压缩方式。
/// </summary>
public enum CompressionType
{
/**//// <summary>
/// GZip 压缩格式
/// </summary>
GZip,
/**//// <summary>
/// BZip2 压缩格式
/// </summary>
BZip2,
/**//// <summary>
/// Zip 压缩格式
/// </summary>
Zip
}
/**//// <summary>
/// 使用 SharpZipLib 进行压缩的辅助类,简化对字节数组和字符串进行压缩的操作。
/// </summary>
public class CompressionHelper
{
/**//// <summary>
/// 压缩供应者,默认为 GZip。
/// </summary>
public static CompressionType CompressionProvider = CompressionType.GZip;
Public methods#region Public methods
/**//// <summary>
/// 从原始字节数组生成已压缩的字节数组。
/// </summary>
/// <param name="bytesToCompress">原始字节数组。</param>
/// <returns>返回已压缩的字节数组</returns>
public static byte[] Compress(byte[] bytesToCompress)
{
MemoryStream ms = new MemoryStream();
Stream s = OutputStream(ms);
s.Write(bytesToCompress, 0, bytesToCompress.Length);
s.Close();
return ms.ToArray();
}
/**//// <summary>
/// 从原始字符串生成已压缩的字符串。
/// </summary>
/// <param name="stringToCompress">原始字符串。</param>
/// <returns>返回已压缩的字符串。</returns>
public static string Compress(string stringToCompress)
{
byte[] compressedData = CompressToByte(stringToCompress);
string strOut = Convert.ToBase64String(compressedData);
return strOut;
}
/**//// <summary>
/// 从原始字符串生成已压缩的字节数组。
/// </summary>
/// <param name="stringToCompress">原始字符串。</param>
/// <returns>返回已压缩的字节数组。</returns>
public static byte[] CompressToByte(string stringToCompress)
{
byte[] bytData = Encoding.Unicode.GetBytes(stringToCompress);
return Compress(bytData);
}
/**//// <summary>
/// 从已压缩的字符串生成原始字符串。
/// </summary>
/// <param name="stringToDecompress">已压缩的字符串。</param>
/// <returns>返回原始字符串。</returns>
public string DeCompress(string stringToDecompress)
{
string outString = string.Empty;
if (stringToDecompress == null)
{
throw new ArgumentNullException("stringToDecompress", "You tried to use an empty string");
}
try
{
byte[] inArr = Convert.FromBase64String(stringToDecompress.Trim());
outString = Encoding.Unicode.GetString(DeCompress(inArr));
}
catch (NullReferenceException nEx)
{
return nEx.Message;
}
return outString;
}
/**//// <summary>
/// 从已压缩的字节数组生成原始字节数组。
/// </summary>
/// <param name="bytesToDecompress">已压缩的字节数组。</param>
/// <returns>返回原始字节数组。</returns>
public static byte[] DeCompress(byte[] bytesToDecompress)
{
byte[] writeData = new byte[4096];
Stream s2 = InputStream(new MemoryStream(bytesToDecompress));
MemoryStream outStream = new MemoryStream();
while (true)
{
int size = s2.Read(writeData, 0, writeData.Length);
if (size > 0)
{
outStream.Write(writeData, 0, size);
}
else
{
break;
}
}
s2.Close();
byte[] outArr = outStream.ToArray();
outStream.Close();
return outArr;
}
#endregion
Private methods#region Private methods
/**//// <summary>
/// 从给定的流生成压缩输出流。
/// </summary>
/// <param name="inputStream">原始流。</param>
/// <returns>返回压缩输出流。</returns>
private static Stream OutputStream(Stream inputStream)
{
switch (CompressionProvider)
{
case CompressionType.BZip2:
return new BZip2OutputStream(inputStream);
case CompressionType.GZip:
return new GZipOutputStream(inputStream);
case CompressionType.Zip:
return new ZipOutputStream(inputStream);
default:
return new GZipOutputStream(inputStream);
}
}
/**//// <summary>
/// 从给定的流生成压缩输入流。
/// </summary>
/// <param name="inputStream">原始流。</param>
/// <returns>返回压缩输入流。</returns>
private static Stream InputStream(Stream inputStream)
{
switch (CompressionProvider)
{
case CompressionType.BZip2:
return new BZip2InputStream(inputStream);
case CompressionType.GZip:
return new GZipInputStream(inputStream);
case CompressionType.Zip:
return new ZipInputStream(inputStream);
default:
return new GZipInputStream(inputStream);
}
}
#endregion
}
}
来源:http://www.mostlylucid.co.uk/archive/2004/04/06/958.aspx
Compression Helper Class using SharpZipLib相关推荐
- C#利用ICSharpCode.SharpZipLib.dll压缩文件和解压文件
/// <summary> /// 压缩文件 /// </summary> using System; using System.IO; using ICSharpCode ...
- 在C#中利用SharpZipLib进行文件的压缩和解压缩
我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手.只好耐下心来, ...
- C#利用SharpZipLib解压或压缩文件夹实例操作
最近要做一个项目涉及到C#中压缩与解压缩的问题的解决方法,大家分享. 这里主要解决文件夹包含文件夹的解压缩问题. 1)下载SharpZipLib.dll,在http://www.icsharpcode ...
- C#压缩解压zip 文件
我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手.只好耐下心来, ...
- 文件 在线压缩 技术
客户有时会有这样的需求:把服务器上的某个文件和文件夹下载到本地,我们的解决方法是使用在线压缩技术.就是把文件先在服务器上压缩,创建一个.ZIP,然后下载到本地. 网上提供了原代码,但是有些不足之处.第 ...
- c#解压,压缩文件!!!
最近要做一个项目涉及到C#中压缩与解压缩的问题的解决方法,大家分享. 这里主要解决文件夹包含文件夹的解压缩问题. 1)下载SharpZipLib.dll,在http://www.icsharpcode ...
- 终于知道为什么NVIDIA的linux驱动这么烂了,一波官方文档告诉你:Linux GPU Driver Developer’s Guide
还记得Linus在记者会上那句话吗? so,NVIDIA, F**k you! https://www.kernel.org/doc/html/latest/gpu/index.html Linux ...
- Visual Studio 2008项目打包问题——项目太大C盘空间不够怎么办?
很多人在项目打包过程中都会遇到这样一个问题,数据库或者某个文件太大(几百兆甚至几个G),打包时Visual Studio会提示C盘存储空间不够.通常情况下,我们会选择采用分区软件重新分配给C盘更多的空 ...
- C#.NET程序尝试—修复Excel批注错误
Excel2007打不开xlsx文件,这在我的日常工作中是非常常见的现象,究其原因是因为大家用的Excel版本五花八门,而恰好不同版本的Excel的xml代码规范又不一样,于是一个用Excel2013 ...
最新文章
- 傅里叶变换性质证明卷积_傅里叶变换(三) 采样与离散序列
- python包含某个数字_python编程练习---有序数组中,快速查找是否包含指定数字,并返回其下标...
- java 多线程 8 : 线程通信
- Android APK系列4-------Android编译APK后的系统结构
- H3C大规模路由综合实验
- java long类型6_Java学习6——基本数据类型及其转换
- 添加控件并处理事件(纯手写)
- linux设置汉语输入法,在Deepin系统下使用韩语(韩文)输入法的方法
- 【数学建模】预测模型之BP网络预测
- 共享打印机时,出现无法访问,你可能没有权限使用网络资源“
- 这个被上帝抛弃的国家,创立了全球一半的科技公司
- python的turtle的正六角形简洁画法
- ARCGIS中坐标转换及地理坐标、投影坐标的定义(转载)
- c语言撩妹小程序,撩妹简单的web小程序!分享给大家~~~~~~
- 李刚疯狂java讲义第3_【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型...
- 转贴一个关于DTO DAO VO BO PO POJO的^_^
- 结构力学计算机矩阵位移法,结构力学-矩阵位移法.ppt
- 快手如何直播引流?快手直播推广方法分享
- 《Linux创建新用户》
- 电脑上做的ppt拿到别的电脑或手机上播放的时候字体错位的解决方法