5

我在 XML 文件中存储了许多 base64 编码的 64 位双精度块。双重数据看起来都相似。

双数据目前在编码之前使用 java 'Deflate' 算法进行压缩,但是文件中的每个二进制数据块都有自己的 deflate 数据字典,这是我希望大大减少的开销。'Deflater' 类有一个我想使用的 'setDictionary' 方法。

所以问题是:

1)。有没有人对如何最好地构建我自己的单个自定义数据字典有任何建议?基于他可以用于多个放气操作的多个双精度部分(x8 字节),即对所有压缩使用相同的字典?我是否应该在所有字节数组中查找公共字节,并将最常见的字节放在字典数组的末尾?

2)。我可以将(自定义)数据字典与压缩数据分开,然后在再次膨胀数据之前根据压缩数据设置字典吗?

3)。放气算法是否会采用我的自定义数据字典,然后无论如何创建自己的略有不同的数据字典,既使我的单一数据字典无效,又减少使用单一数据字典可能节省的空间?

4)。有人可以详细说明zlib压缩数据的结构,以便我自己尝试将数据字典与压缩数据分开吗?

我只想在我的文件中为数据字典使用一次空间,并将它用于我的文件中我的双数据的每个块,但不将它与双数据一起存储。如果数据字典不能与压缩数据分开/单独存储,那么构建自定义奇异字典似乎没有什么价值,因为每个压缩块都有自己的字典。这是正确的吗?

4

1 回答 1

2
  1. 您可以设置一个由数据中常见且频繁使用的字符串组成的固定字典,也可以将最后n 个块连接为字典。无论哪种方式,压缩和解压缩端都需要相同的字典来处理任何给定的块。

  2. 字典不与数据一起发送。这就是重点。另一方需要知道用于解压缩的字典,使用类似于#1 中的方法。

  3. 字典 deflate 使用没有结构。在任何时间点,您都使用前 32K 的未压缩数据作为字典,在该字典中搜索从该 32K 之后的下一个字节开始的匹配字符串。设置字典可以让压缩器抢先获得前 32K 的数据。这里的所有都是它的。

  4. “字典”在压缩数据中,就像你解压缩时得到的一样。

于 2013-11-14T01:32:50.433 回答