问题描述
我已经在Node JS中实现了霍夫曼算法,它看起来像这样:
huffman.encode(inputFilename,outputFilename)
huffman.decode(inputFilename,outputFilename)
但是我想这样实现:
inputStream.pipe(HuffmanEncoderStream).pipe(outputStream)
outputStream.pipe(HuffmanDecoderStream).pipe(inputStream)
问题是我需要读取源文件的内容两次。首先创建频率表和霍夫曼树,然后精确地编码内容。那么可以使用Transform Stream实现此任务吗?
P.S。解码没有问题
解决方法
霍夫曼算法要求首先拥有所有数据才能计算频率。但是,没有什么能阻止您将霍夫曼算法应用于数据块,而这将允许流式传输。如果块足够大(K到MB的100的数量),则传输代码描述的开销相比将非常小。如果数据是同质的,则将获得相同的压缩率。如果数据不是同质的,那么您的压缩甚至可能会得到改善,因为霍夫曼代码将针对该块本地数据的统计信息进行优化。