Java压缩具有相同规则的多个字符串

时间:2015-04-10 09:52:29

标签: java android sqlite compression

我正在创建一个需要大量数据库的Android应用程序(70mb但应用程序必须脱机工作......)。最大的表有两列,一个关键字和一个定义。定义本身相对较短,通常不超过2000个字符,因此单独压缩每个定义不会对我节省很多,因为压缩库存储规则会将字符串解压缩为压缩字符串的一部分。

但是,如果我可以使用相同的规则集压缩所有这些字符串,然后只将压缩数据存储在数据库中,并将规则存储在其他地方,那么我可以节省大量空间。有谁知道一个图书馆会让我做这样的事情吗?

所需行为

public String getDefinition(String keyword) {
    DecompressionObject decompresser = new DecompressionObject(RULES_FILE);
    byte[] data = queryDatabase(keyword);
    return decompresser.decompress(keyword);
}

1 个答案:

答案 0 :(得分:0)

"规则"你打电话给他们不是为什么你的压缩效率有限。在deflate流中的数据之前的Huffman代码表大约是80个字节,因此与2000字节的字符串相比并不重要。

限制压缩效率的仅仅是缺乏绘制匹配字符串的历史记录。查找匹配字符串的唯一位置是2000个字符,然后仅在压缩中的任何一点的前面的字符中。

您可以采取的措施是创建一个常用字符串的字典,该字典将用作历史记录,以便在您压缩的每个字符串之前。然后,提前向解压缩器提供相同的字典,以便它用于解压缩每个字符串。这假设您的字符串集合中存在一些共性。

zlibdeflateSetDictionary()inflateSetDictionary()中提供了这些功能。