java - 重新使用与压缩数据分开的 'Deflate' 的数据字典

标签 java binary double zlib deflate

我在 XML 文件中存储了许多 base64 编码的 64 位 double 据 block 。双数据看起来都很相似。

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

所以问题是:

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

2).我能否将(自定义)数据字典与收缩数据分开,然后在再次膨胀数据之前针对收缩数据设置字典?

3). deflate 算法是否会使用我的自定义数据字典,然后创建它自己的略有不同的数据字典,这既会使我的单一数据字典无效,又会减少使用单一数据字典可能节省的空间?

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

我只想在我的文件中为数据字典使用一次空间,并将它用于我文件中的每个 double 据 block ,但不将其与 double 据一起存储。如果数据字典不能与缩小的数据分开/单独存储,那么构建自定义单数字典似乎没有什么值(value),因为每个压缩 block 无论如何都会有自己的字典。这样对吗?

最佳答案

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

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

  3. deflate 使用的字典没有结构。在任何时间点,您都在使用之前的 32K 未压缩数据作为字典,在其中搜索从 32K 之后的下一个字节开始的匹配字符串。设置字典可以让压缩器抢先处理前 32K 数据。仅此而已。

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

关于java - 重新使用与压缩数据分开的 'Deflate' 的数据字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19965559/

相关文章:

c++ - 以二进制文件打开文件与以文本文件打开文件之间的区别

java - 一个数组,其项是另一个数组中连续项(相邻项)的差异

java - 无法在java中的二维数组中动态项目

java tika如何将html转换为保留特定元素的纯文本

perl - 如何在 Perl 中处理存储在二进制文件中的操作码?

java - 混合字符串中的字符(更改二进制结果的顺序)

c++ - 双重乘法给出四舍五入的结果

Java IEEE 64 位 754 double,要避免的值

java - 将区域 (100x100px) 写入大文件而不读取目标 jpeg

java - XStream、循环引用异常