Metti la tua verifica WriteLine fuori dall'utilizzo. I buffer non sono ancora stati scaricati.
using (DeflateStream compressionStream = new DeflateStream(resultStream, CompressionLevel.Optimal))
{
assignedUsersStream.CopyTo(compressionStream);
//Console.WriteLine("Compressed from {0} to {1} bytes.",
// assignedUsersStream.Length.ToString(), resultStream.Length.ToString());
}
Console.WriteLine("Compressed from {0} to {1} bytes.",
assignedUsersStream.Length, resultStream.ToArray().Length);
E a parte, non hanno bisogno di tutti quei ToString()
s in un WriteLine.
PS: Tutto ciò che fa un file Binary con una stringa è scrivere i byte con il prefisso lunghezza. Se non è necessario il prefisso (mia ipotesi), potrebbe diventare:
string users = "";//Really long string goes here
byte[] result;
using (MemoryStream resultStream = new MemoryStream())
{
using (DeflateStream compressionStream = new DeflateStream(resultStream,
CompressionLevel.Optimal))
{
byte[] inBuffer = Encoding.UTF8.GetBytes(users);
compressionStream.Write(inBuffer, 0, inBuffer.Length);
}
result = resultStream.ToArray();
}
Il contrario è altrettanto facile, ma avrete bisogno di una stima della lunghezza massima di creare il buffer di leggere:
string users2 = null;
using (MemoryStream resultStream = new MemoryStream(result))
{
using (DeflateStream compressionStream = new DeflateStream(resultStream,
CompressionMode.Decompress))
{
byte[] outBuffer = new byte[2048]; // need an estimate here
int length = compressionStream.Read(outBuffer, 0, outBuffer.Length);
users2 = Encoding.UTF8.GetString(outBuffer, 0, length);
}
}
fonte
2013-08-30 19:30:44
questo è tutto! molto! accetterò come risposta in un minuto – Leonardo
Buono. Assicurati di leggere la risposta di Thomas sull'eliminazione di 1 MemoryStream e potresti anche sostituire il formattatore con 'Encoding.GetBytes()'. –