Je regardais juste un échantillon de code pour compresser une chaîne. Je trouve que l'utilisation de la classe GZipStream suffit. Mais je ne comprends pas pourquoi nous devons le convertir en base 64 comme montré dans l'exemple.GZipStream: pourquoi nous convertissons en base 64 après compression?
using System.IO.Compression;
using System.Text;
using System.IO;
public static string Compress(string text)
{
byte[] buffer = Encoding.UTF8.GetBytes(text);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}
ms.Position = 0;
MemoryStream outStream = new MemoryStream();
byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);
byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
return Convert.ToBase64String (gzBuffer);
}
De plus, je ne comprends pas mon gzBuffer l'est initialisé à une taille compressed.Length + 4
. En fait, je ne comprends pas pourquoi nous avons les dernières déclarations non plus. Quelqu'un peut-il partager un peu de lumière ...
PS: Je ne suis pas un étudiant en informatique.
afin que la conversion n'affecte pas la taille de la sortie? Et à propos de la routine de décodage - oui, il y en a une! quel est le but de stocker la longueur dans les 4 octets? Est-ce un nécessaire? Ps; Le code provient de [ici] (http://www.csharphelp.com/2007/09/compress-and-decompress-strings-in-c/). – deostroll