【发布时间】:2021-02-17 16:31:23
【问题描述】:
我正在使用 Huffman 代码进行文件压缩和解压缩的项目。首先,我需要我要压缩的文件的每个唯一字符的频率。然后我用文件的字符频率的优先级队列构建了一个树。
`public static HuffmanNode buildTree(Map<Character, Integer> freq) {
PriorityQueue<HuffmanNode> priorityQueue = new PriorityQueue<>();
Set<Character> keySet = freq.keySet();
for (Character c : keySet) {
HuffmanNode huffmanNode = new HuffmanNode();
huffmanNode.data = c;
huffmanNode.frequency = freq.get(c);
huffmanNode.left = null;
huffmanNode.right = null;
priorityQueue.offer(huffmanNode);
}
assert priorityQueue.size() > 0;
while (priorityQueue.size() > 1) {
HuffmanNode x = priorityQueue.peek();
priorityQueue.poll();
HuffmanNode y = priorityQueue.peek();
priorityQueue.poll();
HuffmanNode sum = new HuffmanNode();
sum.frequency = x.frequency + y.frequency;
sum.data = '-';
sum.left = x;
sum.right = y;
root = sum;
priorityQueue.offer(sum);//Inserts the specified element to the queue. If the queue is full, it returns false.
}
return priorityQueue.poll();
}
然后我遍历树并将其位值存储到文件中。遍历树时,左孩子为 0,右孩子为 1,并将其存储到文件中。它是压缩部分。 但是我的问题是,当我想从压缩文件中解压文件时,我无法解压它。我想我必须通过序列化来存储树,(听说过 java 的这个概念)。解压时我必须遍历树。但我不知道如何序列化或存储树。谁能帮我解决这个问题?
【问题讨论】:
标签: java huffman-code