使用 SharpZipLib 进行压缩的辅助类,简化压缩字节数组和字符串的操作。
using System;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.BZip2;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Zip;
namespace Compression
{
///
1<summary>
2
3/// 压缩方式。
4
5/// </summary>
public enum CompressionType
{
GZip,
BZip2,
Zip
}
///
1<summary>
2
3/// 使用 SharpZipLib 进行压缩的辅助类,简化压缩字节数组和字符串的操作。
4
5/// </summary>
public class CompressionHelper
{
///
1<summary>
2
3/// 压缩供应者,默认为 GZip 。
4
5/// </summary>
public static CompressionType CompressionProvider = CompressionType.GZip;
#region Public methods
///
1<summary>
2
3/// 从原始字节数组生成已压缩的字节数组。
4
5/// </summary>
///
1<param name="bytesToCompress"/>
原始字节数组。
///
1<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();
}
///
1<summary>
2
3/// 从原始字符串生成已压缩的字符串。
4
5/// </summary>
///
1<param name="stringToCompress"/>
原始字符串。
///
1<returns> 返回已压缩的字符串。 </returns>
public static string Compress( string stringToCompress )
{
byte [] compressedData = CompressToByte( stringToCompress );
string strOut = Convert.ToBase64String( compressedData );
return strOut;
}
///
1<summary>
2
3/// 从原始字符串生成已压缩的字节数组。
4
5/// </summary>
///
1<param name="stringToCompress"/>
原始字符串。
///
1<returns> 返回已压缩的字节数组。 </returns>
public static byte [] CompressToByte( string stringToCompress )
{
byte [] bytData = Encoding.Unicode.GetBytes( stringToCompress );
return Compress( bytData );
}
///
1<summary>
2
3/// 从已压缩的字符串生成原始字符串。
4
5/// </summary>
///
1<param name="stringToDecompress"/>
已压缩的字符串。
///
1<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;
}
///
1<summary>
2
3/// 从已压缩的字节数组生成原始字节数组。
4
5/// </summary>
///
1<param name="bytesToDecompress"/>
已压缩的字节数组。
///
1<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
#region Private methods
///
1<summary>
2
3/// 从给定的流生成压缩输出流。
4
5/// </summary>
///
1<param name="inputStream"/>
原始流。
///
1<returns> 返回压缩输出流。 </returns>
private static Stream OutputStream( Stream inputStream )
{
switch ( CompressionProvider )
{
<span style="mso-tab-count: