Lempel-Ziv解压缩多相同符号串异常及代码问题问询
Lempel-Ziv解压缩代码缺陷分析
核心缺陷如下:
- 符号类字符被遗漏处理
你代码中仅处理了StreamTokenizer.TT_WORD(单词)和StreamTokenizer.TT_NUMBER(数字)两类令牌,+、-这类符号如果没有被正确配置为单词字符,要么会被StreamTokenizer默认当作分隔符直接丢弃,要么会以自身ASCII码作为ttype值,没有对应的处理分支,不会被写入输出结果和搜索缓冲区,直接导致内容缺失。 - 数字分支的令牌消费逻辑错误
识别到数字类型的offset值后,你连续调用了两次streamT.nextToken():第一次判断下一个令牌是否为单词,不是的话第二次直接取length值。该逻辑默认offset和length之间的令牌是无需处理的分隔符,如果这个位置的令牌本身就是普通文本内容(比如你示例中的+),会被直接跳过不处理,不仅导致当前行内容缺失,还会打乱后续令牌的解析顺序,引发下一行内容混乱。 - 特殊场景下的数字处理逻辑错误
当你判断offset后跟着的是单词时,直接将offset数值转为字符串和单词拼接写入输出。如果这个数字确实是LZ压缩标记的偏移量,只是分隔符被识别为了普通字符,该逻辑会把偏移量当成普通文本处理,直接导致解压缩结果错误。 - 输入流读取存在隐患
你使用FileReader以平台默认编码的字符流模式读取文件,如果压缩后的内容包含二进制数据,或者压缩文件的编码和运行环境默认编码不匹配,会直接引发数据解析错误。 - 字符串拼接性能问题
你使用String类型的outputData做拼接操作,解压大文件时会产生大量临时对象,性能极低,建议改用StringBuilder。
内容的提问来源于stack exchange,提问作者Kristina
相关产品推荐
相关产品推荐

