压缩后将huffman树写入文件
Writing the huffman tree to file after compression
我试图在插入所有实际压缩文件数据后将霍夫曼树写入压缩文件。但是,我刚刚意识到一个问题,假设我决定一旦我所有的实际数据已经写入文件,我将在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);
应该工作。您可以压缩数据以获得更好的压缩。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- 压缩后将huffman树写入文件