Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 将哈夫曼树和编码比特流一起存储为文件的基本技术是什么?_File_Huffman Code - Fatal编程技术网

File 将哈夫曼树和编码比特流一起存储为文件的基本技术是什么?

File 将哈夫曼树和编码比特流一起存储为文件的基本技术是什么?,file,huffman-code,File,Huffman Code,如何将哈夫曼编码的比特流存储为二进制文件?要存储编码,您需要具备三个条件: 重建将每个字符映射到位模式的编码树的某种方法 流的实际编码 检测编码数据结尾的某种方法 有很多方法可以解决这些问题。您可以将每个字符的位模式显式存储在一个表中,也可以对压缩的所有流使用相同的编码表。至于如何检测流的结束,一个选项可能是使用伪EOF字符来终止此流。为此,在构建哈夫曼编码树时,向其添加一个多重性为1的新字符,该字符将用作描绘流结尾的哨兵。在写入结果时,您在结尾处写入此字符,这样您就可以知道流的结束位置,即使它

如何将哈夫曼编码的比特流存储为二进制文件?

要存储编码,您需要具备三个条件:

  • 重建将每个字符映射到位模式的编码树的某种方法
  • 流的实际编码
  • 检测编码数据结尾的某种方法
  • 有很多方法可以解决这些问题。您可以将每个字符的位模式显式存储在一个表中,也可以对压缩的所有流使用相同的编码表。至于如何检测流的结束,一个选项可能是使用伪EOF字符来终止此流。为此,在构建哈夫曼编码树时,向其添加一个多重性为1的新字符,该字符将用作描绘流结尾的哨兵。在写入结果时,您在结尾处写入此字符,这样您就可以知道流的结束位置,即使它没有使用完全适合一个字节的位数

    为了存储实际的内容,我建议将编码的表示缓冲到一个位向量中,该位向量将自动刷新到8位的倍数上的文件流中。当然,这不是唯一的方法,所以选择最有效的方法