压缩后将霍夫曼树写入文件

时间:2011-12-27 12:58:27

标签: c++ huffman-code

在插入所有实际压缩文件数据后,我正在尝试将Huffman树写入压缩文件。但是,我刚刚意识到一个问题,假设我决定一旦我的所有实际数据都写入文件,我将输入2个换行符然后写树。 这意味着,当我读回东西时,那两个换行符(或任何真正的角色)都是我的分隔符。问题是,实际数据完全有可能一个接一个地有2个换行,在这种情况下,我的分隔符检查会失败。 我在这里采用了两个换行的例子,但对于任何字符串都是如此,我可以通过将更长的字符串作为分隔符来破坏问题,但这会产生两个不可取的效果: 1.在压缩数据中,长字符串存在一些巧合的可能性很小。 2.不一定要压缩需要压缩的文件。

有没有人对如何将压缩数据与树数据分开有任何建议?

2 个答案:

答案 0 :(得分:3)

首先,以字节为单位写入树的大小。然后,编写树本身,然后编写内容本身。

阅读时,首先阅读大小,然后阅读树(现在知道要阅读多少个字符),然后阅读内容。

大小可以写成字符串,以换行符结束 - 这样,您就知道第一个数字和换行符属于树的大小。

答案 1 :(得分:0)

为什么不在前8个字节(每个4个字节)和数据上写入size和len? 然后是:

uint32_t compressed_size;
uint32_t data_len;
char * data;

file.read((char*)compressed_size, 4);
file.read((char*)data_len, 4);
data = new char[data_len];
zip.read(data, data_len);

应该有效。 您可以缩小数据以获得更好的压缩效果。