Compression Helper Class using SharpZipLib

使用 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:

Published At
Categories with Web编程
Tagged with
comments powered by Disqus