【发布时间】:2011-07-20 09:54:07
【问题描述】:
我目前正在研究一种自定义放气算法,该算法应封装在派生自 System.IO.Stream 的自定义类中。
我知道是一个 DeflateStream 的 .Net 实现,但我也想完全理解算法,因为我需要实现它,因为 Silverlight am using 不包括该类。
我已经阅读了一些关于 deflate 的信息,但不明白 deflate 是 LZ77 和 Huffman-Encoding 的组合,并且已经为 LZ77 花费了一些时间em> 实施,但现在确实有一些问题:
1) LZ77 的输出是一个三元组列表(偏移量、长度、后继)。将它们映射为三个字节不是很有效,不是吗?你有什么建议?我将所有输出写入底层 MemoryStream,它只能处理(一组)字节。
2) 您建议滑动窗口使用什么尺寸?
3) 我知道什么是霍夫曼编码,但我该如何应用它呢?我的问题是我不知道我需要用它映射什么大小的“块”并且没有找到任何有关此的信息。我是否为每个字节应用它?两个字节?三?以及如何处理结果输出(与 1 中提到的问题相同)?我曾想过使用一种状态机来继续读取字节并提取霍夫曼代码,但这似乎效率不高。有没有更好的办法?
提前谢谢你!
【问题讨论】:
-
你在 C# 上实现过 deflate 算法吗?可以分享一下吗?