繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> compression helper...improved version (SharpZipLib)

compression helper...improved version (SharpZipLib)

2007-09-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:I posted my compression helper class before and realised almost instantly that it suffered from 'legacy lag' - so it'd been changed so much over the months that it was really bad! Anyway, presente...

I posted my compression helper class before and realised almost instantly that it suffered from 'legacy lag' - so it'd been changed so much over the months that it was really bad!

Anyway, presented below is a modified version of that class (which I've also tried out my new formatting scheme on) as a reminder, it's just a simple wrapper around SharpZipLib.

using System;

using System.Text;

using System.IO;

using ICSharpCode.SharpZipLib;

namespace SerializableJob.Compression

{

public enum CompressionType

{

GZip,

BZip2,

Zip

}

public class Compression

{

public static CompressionType CompressionProvider = CompressionType.GZip;

private static Stream OutputStream(Stream inputStream)

{

switch(CompressionProvider)

{

case CompressionType.BZip2:

return new ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream(inputStream);

case CompressionType.GZip:

return new ICSharpCode.SharpZipLib.GZip.GZipOutputStream(inputStream);

case CompressionType.Zip:

return new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(inputStream);

default:

return new ICSharpCode.SharpZipLib.GZip.GZipOutputStream(inputStream);

}

}

private static Stream InputStream(Stream inputStream)

{

switch(CompressionProvider)

{

case CompressionType.BZip2:

return new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(inputStream);

case CompressionType.GZip:

return new ICSharpCode.SharpZipLib.GZip.GZipInputStream(inputStream);

case CompressionType.Zip:

return new ICSharpCode.SharpZipLib.Zip.ZipInputStream(inputStream);

default:

return new ICSharpCode.SharpZipLib.GZip.GZipInputStream(inputStream);

}

}

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();

}

public static string Compress(string stringToCompress)

{

byte[] compressedData = CompressToByte(stringToCompress);

string strOut = Convert.ToBase64String(compressedData);

return strOut;

}

public static byte[] CompressToByte(string stringToCompress)

{

byte[] bytData = Encoding.Unicode.GetBytes(stringToCompress);

return Compress(bytData);;

}

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 = System.Text.Encoding.Unicode.GetString(DeCompress(inArr));

}

catch (NullReferenceException nEx)

{

return nEx.Message;

}

return outString;

}

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;

}

}

}

责任编辑:admin
相关文章