如何识别压缩/未压缩的位组?

时间:2012-11-18 16:18:50

标签: compression byte bit delimiter

我正在使用一个静态字典文件,其中包含一些单词和值。此值的大小不固定,例如the1love01kill101等。当我尝试压缩一组单词,如果该单词存在值,我会遍历每个单词并查找字典。如果存在,我用值更改单词,如果它不存在,我将单词编码为字节。压缩后我得到了一大块的比特,因为这些字典值和未压缩的单词不是固定大小的,所以我不能对这些位进行分组并对它们进行解码。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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