2012-11-18 51 views
2

我正在使用一个静态字典文件,其中包含一些单词和值。这个值不是固定的大小,例如the1,love01,kill101等等。当我尝试压缩一组单词时,如果该单词的值存在,我遍历每个单词并查找字典。如果存在,我用值更改单词,如果它不存在,我将单词编码为字节。在压缩之后,我得到了一大块比特,并且由于这些字典值和未压缩的字不是固定大小的,我不能对这些比特进行分组并对它们进行解码。如何识别压缩/解压缩位组?

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

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

回答

0

首先,您打算部署这种语言和系统?许多语言都提供了自己的压缩库和工具,可以满足您的需求,而不需要重大的低级设计任务。

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

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

  1. 创建仅在代码字之间使用的固定大小分隔符。这可以在分析文件之后但在实际写出压缩数据之前确定。
  2. 如果您生成您的分隔符而不是固定的已知值,请将其作为您的一个标题项目。
  3. 保持您的标题为简单的ascii格式,以便您可以使用标准工具(如sscanf和fscanf)轻松提取它。
  4. 如果你想有一个头可以包含额外的信息,你可能需要一个一致的方式来告诉头结束和数据的开始。包括“ENDHEADER”的效果应该足够并且仍然容易识别。
+0

我应该为特定项目开发这个功能,所以我不能使用任何库或工具。关于固定大小的分隔符的问题在最后一段。 – gmnnn