【发布时间】:2011-12-10 19:58:26
【问题描述】:
我需要编写一个程序来使用 Huffman 算法压缩/解压缩 txt 文件
我已经写好了,它适用于字符数少于缓冲区大小的文件,但它不适用于字符数更多的文件。
我的问题是将压缩缓冲区与解压缩缓冲区接口。
因此,如果压缩写入的字节数(包含要通过树的 1 和 0)与解压缩读取的字节数不同,则它不起作用。 例如,如果压缩的缓冲区写入 200,我需要解压的缓冲区正好读取 200 个字节。
如果我将解压的大小设置为读取 200,则在某处压缩会写入 200,其他时候会小于或大于 200。
您能否建议如何跟踪每次压缩写入的字节数并将其传输到解压缩部分?
【问题讨论】:
-
几天前,我做了同样的程序。你能多描述一下你的问题在哪里吗?
-
当然,对于压缩,我使用 inbuffer (4000bytes) 来读取文件,
-
读取文件后,我创建了频率表。将其写入输出。创建树。关闭并重新打开输入文件以再次读取以获取每个字母的路径,在输出文件中写入路径(0 向上 1 向下)我使用 3000 字节缓冲区。在每个 0 或 1 移入 8 位缓冲区后写入这些位。但是有些位是垃圾,所以我对它们进行计数,并将输出作为缓冲区的第一个字符写入,我从解压缩中读回。但问题是,压缩的输出缓冲区的大小应该始终与 decom 的 inbuffer 的大小相同
-
但是,压缩输出缓冲区的大小并不总是 3000,因为有时它写入的字节数少于 3000,任何建议如何避免此问题,或任何其他如何获取压缩和解压缩并注意垃圾位?
标签: assembly compression huffman-code