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;
![](/Images/OutliningIndicators/None.gif)
using System.Text;
![](/Images/OutliningIndicators/None.gif)
using System.IO;
![](/Images/OutliningIndicators/None.gif)
using ICSharpCode.SharpZipLib;
![](/Images/OutliningIndicators/None.gif)
namespace SerializableJob.Compression
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
public enum CompressionType
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
GZip,
![](/Images/OutliningIndicators/InBlock.gif)
BZip2,
![](/Images/OutliningIndicators/InBlock.gif)
Zip
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
public class Compression
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
public static CompressionType CompressionProvider = CompressionType.GZip;
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
private static Stream OutputStream(Stream inputStream)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
switch(CompressionProvider)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
case CompressionType.BZip2:
![](/Images/OutliningIndicators/InBlock.gif)
return new ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream(inputStream);
![](/Images/OutliningIndicators/InBlock.gif)
case CompressionType.GZip:
![](/Images/OutliningIndicators/InBlock.gif)
return new ICSharpCode.SharpZipLib.GZip.GZipOutputStream(inputStream);
![](/Images/OutliningIndicators/InBlock.gif)
case CompressionType.Zip:
![](/Images/OutliningIndicators/InBlock.gif)
return new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(inputStream);
![](/Images/OutliningIndicators/InBlock.gif)
default:
![](/Images/OutliningIndicators/InBlock.gif)
return new ICSharpCode.SharpZipLib.GZip.GZipOutputStream(inputStream);
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
private static Stream InputStream(Stream inputStream)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
switch(CompressionProvider)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
case CompressionType.BZip2:
![](/Images/OutliningIndicators/InBlock.gif)
return new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(inputStream);
![](/Images/OutliningIndicators/InBlock.gif)
case CompressionType.GZip:
![](/Images/OutliningIndicators/InBlock.gif)
return new ICSharpCode.SharpZipLib.GZip.GZipInputStream(inputStream);
![](/Images/OutliningIndicators/InBlock.gif)
case CompressionType.Zip:
![](/Images/OutliningIndicators/InBlock.gif)
return new ICSharpCode.SharpZipLib.Zip.ZipInputStream(inputStream);
![](/Images/OutliningIndicators/InBlock.gif)
default:
![](/Images/OutliningIndicators/InBlock.gif)
return new ICSharpCode.SharpZipLib.GZip.GZipInputStream(inputStream);
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
public static byte[] Compress(byte[] bytesToCompress)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
MemoryStream ms = new MemoryStream();
![](/Images/OutliningIndicators/InBlock.gif)
Stream s = OutputStream(ms);
![](/Images/OutliningIndicators/InBlock.gif)
s.Write(bytesToCompress,0, bytesToCompress.Length);
![](/Images/OutliningIndicators/InBlock.gif)
s.Close();
![](/Images/OutliningIndicators/InBlock.gif)
return ms.ToArray();
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
public static string Compress(string stringToCompress)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
byte[] compressedData = CompressToByte(stringToCompress);
![](/Images/OutliningIndicators/InBlock.gif)
string strOut = Convert.ToBase64String(compressedData);
![](/Images/OutliningIndicators/InBlock.gif)
return strOut;
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
public static byte[] CompressToByte(string stringToCompress)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
byte[] bytData = Encoding.Unicode.GetBytes(stringToCompress);
![](/Images/OutliningIndicators/InBlock.gif)
return Compress(bytData);;
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
public string DeCompress(string stringToDecompress)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
string outString = string.Empty;
![](/Images/OutliningIndicators/InBlock.gif)
if (stringToDecompress == null)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
throw new ArgumentNullException("stringToDecompress","You tried to use an empty string");
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
try
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
byte[] inArr = Convert.FromBase64String(stringToDecompress.Trim());
![](/Images/OutliningIndicators/InBlock.gif)
outString = System.Text.Encoding.Unicode.GetString(DeCompress(inArr));
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
catch (NullReferenceException nEx)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
return nEx.Message;
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
return outString;
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
public static byte[] DeCompress(byte[] bytesToDecompress)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
byte[] writeData = new byte[4096];
![](/Images/OutliningIndicators/InBlock.gif)
Stream s2 = InputStream(new MemoryStream(bytesToDecompress));
![](/Images/OutliningIndicators/InBlock.gif)
MemoryStream outStream = new MemoryStream();
![](/Images/OutliningIndicators/InBlock.gif)
while(true)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
int size = s2.Read(writeData,0,writeData.Length);
![](/Images/OutliningIndicators/InBlock.gif)
if(size>0)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
outStream.Write(writeData,0,size);
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
else
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
break;
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
s2.Close();
![](/Images/OutliningIndicators/InBlock.gif)
byte[] outArr = outStream.ToArray();
![](/Images/OutliningIndicators/InBlock.gif)
outStream.Close();
![](/Images/OutliningIndicators/InBlock.gif)
return outArr;
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/None.gif)