【发布时间】:2013-11-26 17:59:19
【问题描述】:
我在 XML 文件中存储了许多 base64 编码的 64 位双精度块。双数据看起来都差不多。
目前在编码之前使用 java 'Deflate' 算法对双精度数据进行压缩,但是文件中的每个二进制数据块都有自己的 deflate 数据字典,这是我希望大大减少的开销。 'Deflater' 类有一个我想使用的 'setDictionary' 方法。
所以问题是:
1)。有没有人对如何最好地构建我自己的单个自定义数据字典有任何建议?基于他可以用于多个放气操作的多个双精度部分(x8 字节),即对所有压缩使用相同的字典?我是否应该在所有字节数组中查找公共字节,并将最常见的字节放在字典数组的末尾?
2)。我可以将(自定义)数据字典从压缩数据中分离出来,然后再根据压缩数据设置字典,然后再次膨胀数据吗?
3)。放气算法是否会采用我的自定义数据字典,然后无论如何创建自己的略有不同的数据字典,既使我的单一数据字典无效,又减少使用单一数据字典可能节省的空间?
4)。有人可以详细说明zlib压缩数据的结构,以便我自己尝试将数据字典与压缩数据分开吗?
我只想在我的文件中为数据字典使用一次空间,并将它用于我的文件中我的双数据的每个块,但不将它与双数据一起存储。如果数据字典不能与压缩数据分开/单独存储,那么构建自定义奇异字典似乎没有什么价值,因为每个压缩块都有自己的字典。是这样吗?
【问题讨论】:
-
最简单的 imo 是压缩整个 xml,而不是跨 xml 元素进行压缩。这对你来说可行吗?
-
@Taylor 与二进制文件相比,XML 元素(我的二进制文件除外)的大小很小,所以我不担心压缩整个文件(即文本)——这是我需要压缩的二进制文件.这是可行的,但压缩整个文件意味着压缩我的二进制数据的base64表示,我想在base64编码之前进行二进制压缩。
-
压缩文件的事情是微不足道的。你所追求的是大量的工作、更多的代码和非常规的启动。所有这些都将使这难以维护。如果您正在做所有这些工作以避免更多地压缩您的文档,或者因为您希望在编码之前进行压缩(为什么?),那么努力/收益比似乎并不值得。只是我的 0.02 美元
-
@Taylor 重点是最小化数据字典在每个压缩块中占用的空间。如果所有块(可能有数千个)共享一本字典并且不需要自己的字典,我会认为这是一个潜在的空间节省者。编码(base64)只是发生,以便数据可以在 XML 中持久保存并通过网络传输,它实际上与我正在尝试做的事情无关。
-
我还是不明白你为什么不压缩整个 xml 文档。不是想成为一个混蛋,它只是让我觉得简单得多。
标签: java binary double zlib deflate