这个问题可能并不严格限于 LZW 算法,可能会涵盖 LZ77 和 LZ78 的其他实现:
我一直在尝试编写一个涉及 LZW 字典编码方案的压缩/解压缩实用程序。问题是我发现在编码阶段写出每个代码字(或“代码”)之后有必要包含一个定界字符(空格)。我一直在这样做,因为我不能假设输出直接流式传输到解码器,并且可以存储在压缩文件中以便稍后解码(在这种情况下,解码器将需要某种方法来检测分离的内容码字 - 分隔符)。
我最近被告知这是不必要的,并且解码器应该能够动态地“计算”每次要读取多少压缩文件,大概是基于先前读取的代码。据说这将消除(昂贵的)在每个代码之后插入额外字节的需要。
我只是不确定解码器如何解决这个问题。也许了解它如何工作的人可以向我解释一下?谢谢。
编辑:
字典是一个将“输入字符串”映射到整数(代码)的哈希表,并且随着更多的输入数据被读入而以通常的方式构建。代码被写出到压缩文件中。解码器从压缩文件中读取每个代码(整数),并在其字典中查找要输出的关联字符串,或者如果该代码没有条目,那么它会以通常的方式确定字符串应该是什么并更新它的字典。
“为什么文件是流式传输或存储的?” 如果编码器的输出一次将一个代码流式传输到解码器,则解码器可以在接收到每个代码时对其进行处理。但是,如果编码器将所有代码写入一个文件(压缩文件),然后将该文件馈送到解码器,那么解码器如何知道一个代码从哪里开始,另一个代码从哪里开始。该文件将只是一个混搭的数字序列。
例如:分隔压缩文件:127 32 45 22 228 122 209.... 非分隔压缩文件:127324522228122209...
-抢