Ich muss ein Array von Bytes komprimieren. Also schrieb ich diesen Schnipsel:Mit Gzip ein Array von Bytes komprimieren/dekomprimieren
class Program
{
static void Main()
{
var test = "foo bar baz";
var compressed = Compress(Encoding.UTF8.GetBytes(test));
var decompressed = Decompress(compressed);
Console.WriteLine("size of initial table = " + test.Length);
Console.WriteLine("size of compressed table = " + compressed.Length);
Console.WriteLine("size of decompressed table = " + decompressed.Length);
Console.WriteLine(Encoding.UTF8.GetString(decompressed));
Console.ReadKey();
}
static byte[] Compress(byte[] data)
{
using (var compressedStream = new MemoryStream())
using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
{
zipStream.Write(data, 0, data.Length);
zipStream.Close();
return compressedStream.ToArray();
}
}
static byte[] Decompress(byte[] data)
{
using (var compressedStream = new MemoryStream(data))
using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
using (var resultStream = new MemoryStream())
{
zipStream.CopyTo(resultStream);
return resultStream.ToArray();
}
}
}
Das Problem ist, dass ich diese Ausgabe erhalten:
Ich verstehe nicht, warum die Größe des komprimierten Array größer ist als die dekomprimiert ein!
Irgendwelche Ideen?
bearbeiten
nach Kommentar des @ spender: Wenn ich test
Zeichenfolge beispielsweise ändern:
var test = "foo bar baz very long string for example hdgfgfhfghfghfghfghfghfghfghfghfghfghfhg";
ich anderes Ergebnis zu bekommen. Was ist also die Mindestgröße des zu komprimierenden Ausgangsarrays?
Da die Daten so klein ist, dass die Gemeinkosten des Kompressionsformat der Verstärkung der Kompression aufwiegen. Probiere mehr Daten aus. Hinweis: vollständig zufällige Daten werden nicht komprimiert. – spender
@spender plz sehe meine Bearbeitung und posten Sie Ihre Idee als Antwort, danke –