我有100M元素的BitArray。这大约是12.5M。 我必须压缩这个数组。我使用Framework的GZipStream。
public static byte[] Compress(byte[] bytData)
{
try
{
MemoryStream ms = new MemoryStream();
Stream s = new GZipStream(ms, CompressionMode.Compress);
s.Write(bytData, 0, bytData.Length);
s.Close();
byte[] compressedData = ms.ToArray();
return compressedData;
}
catch
{
return null;
}
}
static void Main(string[] args)
{
BitArray t = GetArray();
byte []byteArray = new byte[100000000/8];
t.CopyTo(byteArray, 0);
byte[] compressedData = Compress(byteArray);
Console.WriteLine(compressedData.Length);
}
public static BitArray GetArray()
{
Random r = new Random();
BitArray result = new BitArray(100000000);
for (int i = 0; i < result.Count; i++)
{
if (r.NextDouble() > .5)
{
result.Set(i, true);
}
}
return result;
}
}
但是变量compressedData的大小是12515308。 它比原始阵列大。 任何想法?
可能需要我另一台压缩机?
答案 0 :(得分:1)
您是否尝试过不使用随机数据?压缩的数据不是随机的。我相信常见的压缩算法会寻找比特模式以便进行压缩。作为一个简单的测试,您可以将这些随机字节写入文件,然后查看拉链时会发生什么。
答案 1 :(得分:0)
没有压缩器可以压缩真正的随机数据。 (如前所述,如果可以推导出种子和算法,则可以压缩伪随机数据。)
你的申请是什么?你有真实的数据来测试吗?