将"Deflate"的数据字典重用于压缩数据

Sim*_*ins 5 java binary double zlib deflate

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

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

所以问题是:

1).有没有人有任何关于如何最好地建立我自己的单个自定义数据字典的建议,基于多个双打(x8字节),他可以用于多个deflate操作,即对所有压缩使用相同的字典?我应该在所有字节数组中寻找公共字节,最常见的字节放在字典数组的末尾吗?

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

3).deflate算法是否会使用我的自定义数据字典,然后只是创建自己稍微不同的数据字典,既可以使我的单数据字典无效,又可以减少使用单数据字典的潜在空间节省?

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

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

Mar*_*ler 2

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

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

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

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