ByteCombination
类 字节数组,代表 lzw 算法的前缀+后缀
BitInputStream
类 一个输入流,保存读取数据(要压缩文件数据)
BitOutputStream
类 一个输出流,保存成普通文件数据
IOException
异常类 抛出一个输入输出流异常
NBitInputStream
类 一个输入流,保存读取数据(压缩文件数据)
NBitOutputStream
类 一个输出流,保存压缩文件数据
Dict
类 从原码到 code 的双向映射字典
LimitedDict
类 带限制的字典
Tools
类 工具类
2.2 详细设计和实现
2.2.1 压缩的程序流程
压缩程序的实现过程中,涉及到很多类的调用,除了压缩有关的类,还有 IO
类的调用。忽略 IO 类,压缩类的调用过程如下:
(1)判断文件路径是否正确,正确后,选择压缩方法进行压缩。
(2)选择 Lzw 方法进行压缩。
(3)LzwCompress 实现接口 compress
(4)调用输入流读入文件字符。
(5)对读入的文件字符,调用 Dict 存入字典。
(6)向 encodeOneChar 方法输入该字节,并返回组合的 code。
(7)使用 ByteCombination 把一个 code 变为原码组合。
(8)新建一个输入流,为了重新开始读取
(9)遇到文件结束符,写入压缩缓存
(10)用 Lzw 算法压缩的文件,加个.lzw 的后缀名
(11)压缩完成
compressBitInputStrea
m
ungzip
lzwBuild
NBitOutputS
tream