Java 使用相同的规则压缩多个字符串
Java Compress Multiple strings with the same rule
我正在创建一个 android 需要大量数据库的应用程序(70mb,但该应用程序必须离线工作...)。最大的 table 有两列,关键字和定义。定义本身相对较短,通常在 2000 个字符以下,因此单独压缩每个定义不会节省很多,因为压缩库将规则解压缩为压缩字符串的一部分。
但是,如果我可以使用同一组规则压缩所有这些字符串,然后仅将压缩后的数据存储在数据库中,并将规则存储在其他地方,我可以节省很多 space。有谁知道可以让我做这样的事情的图书馆吗?
期望的行为:
public String getDefinition(String keyword) {
DecompressionObject decompresser = new DecompressionObject(RULES_FILE);
byte[] data = queryDatabase(keyword);
return decompresser.decompress(keyword);
}
您所说的 "rules" 并不是压缩效果有限的原因。 deflate 流中数据之前的霍夫曼代码 table 大约有 80 个字节,因此与 2000 字节的字符串相比并不重要。
限制压缩效果的只是缺乏从中提取匹配字符串的历史记录。查找匹配字符串的唯一位置是在 2000 个字符中,然后仅在压缩中任何点的前面字符中。
要改进压缩,您可以做的是创建一个常用字符串字典,用作您正在压缩的每个字符串之前的历史记录。然后,提前将同一个字典提供给解压器,以供其用于解压每个字符串。这假定您的字符串集合中的内容具有某些共性。
zlib 在 deflateSetDictionary()
和 inflateSetDictionary()
中提供了这些功能。
我正在创建一个 android 需要大量数据库的应用程序(70mb,但该应用程序必须离线工作...)。最大的 table 有两列,关键字和定义。定义本身相对较短,通常在 2000 个字符以下,因此单独压缩每个定义不会节省很多,因为压缩库将规则解压缩为压缩字符串的一部分。
但是,如果我可以使用同一组规则压缩所有这些字符串,然后仅将压缩后的数据存储在数据库中,并将规则存储在其他地方,我可以节省很多 space。有谁知道可以让我做这样的事情的图书馆吗?
期望的行为:
public String getDefinition(String keyword) {
DecompressionObject decompresser = new DecompressionObject(RULES_FILE);
byte[] data = queryDatabase(keyword);
return decompresser.decompress(keyword);
}
您所说的 "rules" 并不是压缩效果有限的原因。 deflate 流中数据之前的霍夫曼代码 table 大约有 80 个字节,因此与 2000 字节的字符串相比并不重要。
限制压缩效果的只是缺乏从中提取匹配字符串的历史记录。查找匹配字符串的唯一位置是在 2000 个字符中,然后仅在压缩中任何点的前面字符中。
要改进压缩,您可以做的是创建一个常用字符串字典,用作您正在压缩的每个字符串之前的历史记录。然后,提前将同一个字典提供给解压器,以供其用于解压每个字符串。这假定您的字符串集合中的内容具有某些共性。
zlib 在 deflateSetDictionary()
和 inflateSetDictionary()
中提供了这些功能。