使用ICSharpCode第三方组件压缩字符串
来源:互联网 发布:phpstorm使用教程知乎 编辑:程序博客网 时间:2024/06/06 20:09
/// <summary>
/// 压缩方式。
/// </summary>
public enum CompressionType
{
/// <summary>
/// GZip 压缩格式
/// </summary>
GZip,
/// <summary>
/// BZip2 压缩格式
/// </summary>
BZip2,
/// <summary>
/// Zip 压缩格式
/// </summary>
Zip
}
/// <summary>
/// 使用 SharpZipLib 进行压缩的辅助类,简化对字节数组和字符串进行压缩的操作。
/// </summary>
public class Compression
{
/// <summary>
/// 压缩供应者,默认为 GZip。
/// </summary>
public static CompressionType CompressionProvider = CompressionType.GZip;
#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 static string UnCompress(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(UnCompress(inArr));
}
catch (NullReferenceException nEx)
{
return nEx.Message;
}
return outString;
}
/// <summary>
/// 从已压缩的字节数组生成原始字节数组。
/// </summary>
/// <param name="bytesToDecompress">已压缩的字节数组。</param>
/// <returns>返回原始字节数组。</returns>
public static byte[] UnCompress(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
#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
}
- 使用ICSharpCode第三方组件压缩字符串
- 使用ICSharpCode第三方组件压缩字符串
- 多文件打包压缩、下载类--使用第三方控件ICSharpCode
- ICSharpCode.SharpZipLib组件压缩.docx
- 使用第三方组件
- ICSharpCode字符串压缩与解压缩
- Unity3d 字符串压缩 ICSharpCode.SharpZipLib
- 第三方组件BottomBar使用
- 如何使用第三方COM组件
- vs2010使用devExpress第三方组件
- 使用第三方组件的一般方法
- ListView 中使用第三方组件 一
- ListView 中使用第三方组件 二
- 使用Qrcode第三方组件生成二维码
- RN使用第三方组件库
- 使用Qrcode第三方组件生成二维码
- 第三方组件
- 第三方组件
- GObject对象系统
- 用.NET框架实现序列化
- CSS单位和CSS默认值大全
- Hibernate 使用JBOSS 自带JNDI连接池连接SQL SERVER 2005的配置方法
- 关于StdAfx.h
- 使用ICSharpCode第三方组件压缩字符串
- CNC vocabulary
- 模板模式
- CAS技术框架描述与定制身份认证程序
- 查看Sql server2005的版本。。
- sql DATEPART函数使用
- 检测sql数据库服务器的状态(摘)
- C# 密码的加密, 解密
- 娱乐在线