2

我正在使用一个静态字典文件,其中包含一些单词和这些单词的值。这些值不是固定大小的,例如theis 1loveis 01killis101等。当我尝试压缩一组单词时,我会遍历每个单词并查找字典是否存在该单词的值。如果存在,我用值更改单词,如果不存在,我将单词编码为字节。压缩后我得到了一大块位,因为这些字典值和未压缩的单词不是固定大小的,我无法对这些位进行分组和解码。

我曾考虑对每组位使用 1 位标志来确定它是压缩的还是未压缩的,但由于代码字或常规字的长度未知,我无法检测到标志位。

如果我使用 1 字节分隔符,它仍然有问题。假设我的分隔符是00000000,在分隔符之前我有分隔符100,在分隔符之后有001,所以我们有10000000000001,我怎么知道这些位中的哪一组是我的分隔符?我可以使用其他方法对这些压缩/未压缩位进行分组以对其进行解码吗?谢谢你。

4

1 回答 1

0

首先,您打算部署什么语言和系统?许多语言都提供了自己的压缩库和工具,并且可以满足您的需求,而无需进行主要的低级设计工作。

这里的答案是建立一些更严格的簿记和文件格式,以便能够撤消压缩。大多数压缩系统的文件格式都有一定的开销,这就是为什么当你压缩两次时,你不一定会保存任何东西,实际上会增加文件的大小。

文件通常利用文件开头的标题来提供关键信息。这将是定义特定于压缩文件的任何规则的好地方。

  1. 创建固定大小的分隔符,仅在代码字之间使用。这可以在分析文件之后但在实际写出压缩数据之前确定。
  2. 如果您生成分隔符而不是固定的已知值,请将其作为标题项之一。
  3. 将您的标题保持为简单的 ascii 格式,以便您可以使用 sscanf 和 fscanf 等标准工具轻松提取它。
  4. 如果您想要一个可以包含额外信息的标题,您可能需要一种一致的方式来判断标题的结束位置和数据的开始位置。包括一些具有“ENDHEADER”效果的东西就足够了,而且仍然很容易识别。
于 2012-11-18T18:20:48.220 回答