我想压缩很多小字符串(大约 75-100 长度的 c# 字符串)。 在创建字典时,我已经知道所有短字符串(近一万亿)。将来不会有额外的短字符串。 我需要在不解压缩其他字符串的情况下恰好增加一个字符串。
现在我正在寻找一个库或执行以下操作的最佳方法:
- 使用我拥有的所有字符串创建一个字典
- 使用这个字典来压缩每个字符串
- 一种使用 1 中的字典压缩一个字符串的方法。
我找到了一个 good related question ,但这不是特定于 c# 的。也许有一些我不知道的 c# 的东西,或者一个奇特的库或者有人已经这样做了。这就是我问这个问题的原因。
编辑:
我用字典谈论这样的事情:http://en.wikipedia.org/wiki/Dictionary_coder 但一切都有助于缩短琴弦。这些字符串是各种语言和 URL 的短文本消息 (30%/70%)。压缩后的字符串不需要是人类可读的。它将存储在二进制文件中。
最佳答案
如果只有一万亿个字符串,那么每个字符串都可以用 40 位(5 个字节)表示。您所需要的只是一种使用 5 字节作为万亿字符串索引的方法。
你怎么知道所有的万亿字符串?如果压缩器和解压缩器都可以访问所有万亿个字符串,或者如果有办法对字符串进行排序和重新创建,那么您所需要的只是索引。
如果找不到索引字符串的方法,则可以获取字符串的一个子集并将它们用作压缩器的字典。只取最有代表性的样本(你需要弄清楚是什么使一些字符串比其他字符串更常见或更能代表其他字符串)并将它们连接成一个 32K 的字典。万亿字符串中的大约 400 个。然后 zlib 的压缩端的 deflateSetDictionary 和解压端的 inflateSetDictionary,两者都使用完全相同的 32K 字典。这将为短字符串提供良好的压缩。
关于c# - 压缩小字符串,用什么创建外部字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10889335/