Il mio piccolo helper di compressione... versione migliorata
Ho pubblicato la mia classe di assistenti alla compressione prima e mi sono reso conto quasi immediatamente che soffriva di 'legacy lagM SK1 - quindi è stato cambiato così tanto negli mesi che era davvero cattivo! Comunque, è una versione modificata di quella classe (che io'ho provato anche il mio nuovo schema di formatazione suM SK3 come riminatoreMSC4 è solo un semplice wrapper intorno SharpZipLib.
usando System;
usando il sistema.Text;
usando il sistema.IO;
usando ICSharpCode.SharpZipLib;
namespace SerializableJob.Compressione
{
public enum CompressionType
{
GZip,
BZip2,
Zip
}
Compressione di classe pubblica
{
Public static CompressionType CompressionProvider = Compression TypeM SK1GZip;
Stream Private Statica OutputStream(InputStremaStream )
{
switch(CompressionProvider)
{
Case CompressionType.BZip2:
restituire il nuovo ICSharpCode.SharpZipLib.BZipM SK2B Zip 2OutputStreamMSC4inputStream≥);
Case CompressionType.GZip:
restituire il nuovo ICSharpCode.SharpZipLib.GZipM SK2G ZipOutputStreamMSC3inputStream≥);
tipo di compressione.Zip
restituire il nuovo ICSharpCode.SharpZipLib.ZipM SK2ZepOutputStreamMSC3inputStream≥);
default:
restituire il nuovo ICSharpCode.SharpZipLib.GZipM SK2G ZipOutputStreamMSC3inputStream≥);
}
}
Stream InputStream(Stream inputStream )
{
switch(CompressionProvider)
{
Case CompressionType.BZip2:
restituire il nuovo ICSharpCode.SharpZipLib.BZipM SK2B Zip 2InputStreamMSC4inputStream≥);
Case CompressionType.GZip:
restituire il nuovo ICSharpCode.SharpZipLib.GZipM SK2G ZipInputStreamMSC3inputStream≥);
tipo di compressione.Zip
restituire il nuovo ICSharpCode.SharpZipLib.ZipM SK2ZepInputStreamMSC3inputStream≥);
default:
restituire il nuovo ICSharpCode.SharpZipLib.GZipM SK2G ZipInputStreamMSC3inputStream≥);
}
}
Byte statico pubblico[] Compress[]BytesToCompress)
{
MemoryStream ms = nuovo MemoryStream();
Stream s = OutputStream(msM SK2
- ScrivereM SK1bytesToCompress,0, bytesToCompression .LongthMSC4
s.Close();
restituire ms.ToArray();
}
String Statico Publico Compress(string stringToCompress )
{
Byte[] dati compressi = CompressToByteM SK2stringToCompress);
string strOut = Convertire.ToBaseM SK2StringMSC3compressedData );
tornare strOut;
}
Byte statico pubblico[] CompressToByteM SK1string stringToCompress)
{
Byte[] bytData = Encoding.UnicodeM SK3GetBytesMSC4stringToCompressMST5
tornare Compress(bytData);;
}
String pubblico DeCompress(string stringToDecompress )
{
string outString = string.EmptyM SK2
Se (stringToDecompress == null)
{
lanciare un nuovo ArgumentNullException("stringToDecompress","hai cercato di usare una stringa vuotaM SK2
}
provare
{
Byte[] inArr = ConvertireM SK2FromBase64StringMNK4stringToDecompressMRK5TrimMMK6
outString = System.Texto .EncodazioneM SK3UnicodeMSC4GetStringMska5DeCompressMske6inArrMске7
}
Cattura (NullReferenceException nEx)
{
restituire nEx.Message;
}
tornare fuoriString;
}
Byte statico pubblico[] DeCompress(byte[]BytesToDecompress)
{
Byte[] writeData = nuovo byte[4096];
Stream s2 M SK1 InputStream(new MemoryStream (bytesToDecompressMSC4
MemoryStream outStream = nuovo MemoryStream();
Mentre(true)
{
dimensione int = sM SK1Read(writeDataMSC3w writeData .LongthMST5
se(grandità>0)
{
outStream.WriteM SK1writeData,0,size );
}
Un altro.
{
interrompere;
}
}
s2.Close();
Byte[] outArr = outStreamM SK2ToArray();
outStream.Close();
tornare fuoriArr;
}
}
} ?>