gpt4 book ai didi

linux - 重用压缩字典

转载 作者:太空狗 更新时间:2023-10-29 11:44:41 25 4
gpt4 key购买 nike

是否有一种压缩工具可以让您将其字典(或类似的)与压缩输出分开输出,以便字典可以在后续压缩中重新使用?这个想法是一次性传输字典,或者在远程站点使用引用字典,并使压缩文件更小以便传输。

我查看了一堆常见压缩工具的文档,但我找不到真正支持它的工具。但大多数常见的压缩工具并不是直接的字典压缩。

我想象的用法是:

compress_tool --dictionary compressed.dict -o compressed.data uncompressed
decompress_tool --dictionary compressed.dict -o uncompressed compressed.data

为了扩展我的用例,我有一个 500MB 的二进制文件 F,我想通过慢速网络进行复制。单独压缩文件会产生 200MB 的大小,这仍然比我想要的要大。但是,我的源和目标都有一个文件 F',它与 F 非常相似,但差异很大,二进制差异工具无法正常工作。我在想,如果我在两个站点上压缩 F',然后重新使用有关该压缩的信息来压缩源上的 F,我可能会从传输中删除一些可以使用 F' 在目标上重建的信息。

最佳答案

预设词典对于这种大小的文件并不是很有用。它们非常适合小数据(想想压缩数据库中的字段、RPC 查询/响应、XML 或 JSON 片段等),但对于像您这样的大文件,算法会非常快速地建立自己的字典。

也就是说,碰巧我在 Squash 中使用预设词典最近,我确实有一些代码可以完成您所说的 zlib 插件的大部分工作。我不会把它推到 master(如果我决定支持预设词典,我会考虑不同的 API),但如果你想使用,我只是把它推到 'deflate-dictionary-file' 分支看。要压缩,请执行以下操作

squash -ko dictionary-file=foo.dict -c zlib:deflate uncompressed compressed.deflate

解压,

squash -dko dictionary-file=foo.dict -c zlib:deflate compressed.deflate decompressed

据我所知,zlib 中没有任何东西支持构建字典——你必须自己做。 zlib 文档描述了“格式”:

The dictionary should consist of strings (byte sequences) that are likely to be encountered later in the data to be compressed, with the most commonly used strings preferably put towards the end of the dictionary. Using a dictionary is most useful when the data to be compressed is short and can be predicted with good accuracy; the data can then be compressed better than with the default empty dictionary.

为了测试,我使用了这样的东西 (YMMV):

cat input | tr ' ' '\n' | sort | uniq -c | awk '{printf "%06d %s\n",$1,$2}' | sort | cut -b8- | tail -c32768

关于linux - 重用压缩字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24026900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com