有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 Java使用相同的规则压缩多个字符串

我正在创建一个安卓应用程序,它需要一个巨大的数据库(70mb,但应用程序必须离线工作…)。最大的表有两列,一个关键字和一个定义。这些定义本身相对较短,通常不超过2000个字符,因此单独压缩每一个定义不会节省太多时间,因为压缩库将规则存储为压缩字符串的一部分来解压字符串

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

想要的行为:

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

共 (1) 个答案

  1. # 1 楼答案

    你所说的“规则”并不是你获得有限压缩效果的原因。在deflate流中,位于数据前面的哈夫曼代码表约为80字节,因此与2000字节的字符串相比并不重要

    限制压缩效果的原因仅仅是缺乏绘制匹配字符串的历史记录。唯一可以查找匹配字符串的地方是在2000个字符中,然后在压缩过程中的任何一点上只查找前面的字符

    要改进压缩,您可以创建一个通用字符串字典,将其用作压缩每个字符串之前的历史记录。然后,同样的字典会提前提供给解压器,以便解压器用来解压每个字符串。这是假设在你的字符串集合中有一些共同的内容

    zlibdeflateSetDictionary()inflateSetDictionary()中提供这些函数