Lamloumi Afif Lamloumi Afif - 9 months ago 69
C# Question

Using Gzip to compress/decompress an array of bytes

I need to compress an array of bytes. So I wrote this snippet :

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();
}
}
}


The problem is that I get this output :

output

I don't understand why the size of the compressed array is greater than the decompressed one !

Any ideas?

Edit

after @spender's comment: if I change
test
string for example :

var test = "foo bar baz very long string for example hdgfgfhfghfghfghfghfghfghfghfghfghfghfhg";


I get different result. So what is the minimum size of the initial array to be compressed ?

Answer Source

Compressed file has headers and it increases the file size, when the input size is very small the output can be even bigger as you see. try it with a file with bigger size.