压缩后将huffman树写入文件

Writing the huffman tree to file after compression

本文关键字:文件 huffman 压缩      更新时间:2023-10-16

我试图在插入所有实际压缩文件数据后将霍夫曼树写入压缩文件。但是,我刚刚意识到一个问题,假设我决定一旦我所有的实际数据已经写入文件,我将在2换行字符,然后写树。这意味着,当我读回内容时,这两个换行符(或任何字符)是我的分隔符。问题是,实际数据完全有可能一个接一个地有2个换行符,在这种情况下,分隔符检查将失败。我在这里举了两个换行的例子,但对于任何字符串都是一样的,我可以通过使用更长的字符串作为分隔符来颠覆这个问题,但这会产生两个潜在的影响:1. 由于某种巧合,长字符串仍然存在于压缩数据中的可能性很小。2. 不必要地增加需要压缩的文件。

有没有人对如何从树数据中分离压缩数据有任何建议?

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

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

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

为什么不在前8个字节(每个4个)上写大小和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);

应该工作。您可以压缩数据以获得更好的压缩。