如何有效地预测数据是否可压缩
我想编写一个存储后端来存储更大的数据块。数据可以是任何东西,但它主要是二进制文件(图像,pdf,jar文件)或文本文件(xml,jsp,js,html,java...)。我发现大部分数据已经压缩。如果所有内容都压缩,则可以节省大约15%的磁盘空间。
我正在寻找最有效的算法,可以很有可能地预测一个数据块(假设128 KB)可以被压缩或不压缩(无损压缩),而不必查看所有数据(如果可能的话)。
压缩算法将是LZF,Deflate或类似的东西(可能是Google Snappy)。因此,预测数据是否可压缩应该比压缩数据本身快得多,并且使用更少的内存。
我已经知道的算法:
尝试压缩数据的子集,假设128字节(这有点慢)
计算128字节的总和,如果它在一定范围内,那么它很可能是不可压缩的(在128 * 127的10%以内)(这很快,而且相对不错,但我正在寻找更可靠的东西,因为算法实际上只查看每个字节的最上面的位)
看看文件头(相对可靠,但感觉像作弊)
我想一般的想法是,我需要一种算法,可以快速计算字节列表中每个位的概率是否大约为0.5。
更新
我已经实现了“ASCII检查”,“熵计算”和“简化压缩”,并且都给出了很好的结果。我想改进算法,现在我的想法是不仅要预测数据是否可以压缩,还要预测可以压缩多少数据。可能使用算法的组合。现在,如果我只能接受多个答案...我将接受给出最佳结果的答案。
仍然欢迎其他答案(新想法)!如果可能的话,使用源代码或链接:-)