Se si devono inviare array di byte da un client ad un server e viceversa, attraverso una connessione TCP, comprimendo i dati prima dell'invio si può ridurre il traffico di rete. A questo scopo, è possibile utilizzare una delle classi che fa parte della libreria SharpZipLib:
public byte[] Compress(byte[] buffer)
{
using (MemoryStream ms = new MemoryStream())
{
int size = buffer.Length;
using (BinaryWriter bw = new BinaryWriter(ms))
{
//Scrive la lunghezza originale dell'array.
bw.Write(size);
using (BZip2OutputStream zip = new BZip2OutputStream(ms))
zip.Write(buffer, 0, size);
}
return ms.ToArray();
}
}
public byte[] Decompress(byte[] buffer)
{
using (MemoryStream ms = new MemoryStream(buffer))
{
using (BinaryReader br = new BinaryReader(ms))
{
//Legge la lunghezza dell'array di byte decompresso.
int size = br.ReadInt32();
using (BZip2InputStream unzip = new BZip2InputStream(ms))
{
byte[] result = new byte[size];
unzip.Read(result, 0, size);
return result;
}
}
}
}
Tutto il codice ruota intorno agli oggetti BZip2OutputStream e BZip2InputStream, utilizzati rispettivamente per comprimere e decomprimere gli array. Questo esempio, inoltre, funziona anche se il client oppure il server sono realizzati con il .NET Compact Framework, che è pienamente supportato dalla libreria SharpZipLib.