public interface ICompressor
{
byte[] Compress(Stream inputStream);
byte[] Compress(byte[] buffer);
byte[] Decompress(Stream inputStream);
byte[] Decompress(byte[] buffer);
}public class GZipCompressor: ICompressor
{
private const int BUFFER_SIZE = 256 * 1024; //256K
private GZipStream zipStream; public GZipCompressor()
{
} public byte[] Compress(Stream stream)
{
MemoryStream ms = new MemoryStream();
zipStream = new GZipStream(ms, CompressionMode.Compress);
byte[] buffer = new byte[BUFFER_SIZE];
int count = stream.Read(buffer, 0, buffer.Length);
while (count > 0)
{
zipStream.Write(buffer, 0, count);
count = stream.Read(buffer, 0, buffer.Length);
}
zipStream.Flush();
zipStream.Close();
byte[] compressed = ms.ToArray();
ms.Close();
return compressed;
} public byte[] Compress(byte[] buffer)
{
MemoryStream ms = new MemoryStream();
zipStream = new GZipStream(ms, CompressionMode.Compress);
zipStream.Write(buffer, 0, buffer.Length);
zipStream.Flush();
zipStream.Close();
byte[] compressed = ms.ToArray();
ms.Close();
return compressed;
} public byte[] Decompress(Stream inputStream)
{
MemoryStream ms = new MemoryStream();
zipStream = new GZipStream(inputStream, CompressionMode.Decompress);
byte[] buffer = new byte[BUFFER_SIZE];
int count = zipStream.Read(buffer, 0, buffer.Length);
while (count > 0)
{
ms.Write(buffer, 0, count);
count = zipStream.Read(buffer, 0, buffer.Length);
}
zipStream.Close();
byte[] decompressed = ms.ToArray();
ms.Close();
return decompressed;
} public byte[] Decompress(byte[] buffer)
{
MemoryStream ms = new MemoryStream(buffer);
return Decompress(ms);
}
}
{
byte[] Compress(Stream inputStream);
byte[] Compress(byte[] buffer);
byte[] Decompress(Stream inputStream);
byte[] Decompress(byte[] buffer);
}public class GZipCompressor: ICompressor
{
private const int BUFFER_SIZE = 256 * 1024; //256K
private GZipStream zipStream; public GZipCompressor()
{
} public byte[] Compress(Stream stream)
{
MemoryStream ms = new MemoryStream();
zipStream = new GZipStream(ms, CompressionMode.Compress);
byte[] buffer = new byte[BUFFER_SIZE];
int count = stream.Read(buffer, 0, buffer.Length);
while (count > 0)
{
zipStream.Write(buffer, 0, count);
count = stream.Read(buffer, 0, buffer.Length);
}
zipStream.Flush();
zipStream.Close();
byte[] compressed = ms.ToArray();
ms.Close();
return compressed;
} public byte[] Compress(byte[] buffer)
{
MemoryStream ms = new MemoryStream();
zipStream = new GZipStream(ms, CompressionMode.Compress);
zipStream.Write(buffer, 0, buffer.Length);
zipStream.Flush();
zipStream.Close();
byte[] compressed = ms.ToArray();
ms.Close();
return compressed;
} public byte[] Decompress(Stream inputStream)
{
MemoryStream ms = new MemoryStream();
zipStream = new GZipStream(inputStream, CompressionMode.Decompress);
byte[] buffer = new byte[BUFFER_SIZE];
int count = zipStream.Read(buffer, 0, buffer.Length);
while (count > 0)
{
ms.Write(buffer, 0, count);
count = zipStream.Read(buffer, 0, buffer.Length);
}
zipStream.Close();
byte[] decompressed = ms.ToArray();
ms.Close();
return decompressed;
} public byte[] Decompress(byte[] buffer)
{
MemoryStream ms = new MemoryStream(buffer);
return Decompress(ms);
}
}
有完整的压缩库代码下载,并有演示程序