【发布时间】:2016-12-01 11:07:08
【问题描述】:
我需要压缩一个字节数组。所以我写了这个 sn-p :
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();
}
}
}
问题是我得到了这个输出:
不明白为什么压缩后的数组比解压后的大!
有什么想法吗?
编辑
在@spender 的评论之后:例如,如果我更改test 字符串:
var test = "foo bar baz very long string for example hdgfgfhfghfghfghfghfghfghfghfghfghfghfhg";
我得到不同的结果。那么要压缩的初始数组的最小大小是多少?
【问题讨论】:
-
因为数据太小以至于压缩格式的开销超过了压缩的收益。尝试更多数据。注意:完全随机的数据不会被压缩。
-
@spender 请查看我的编辑并发布您的想法作为答案,谢谢