霍夫曼文件压缩代码示例java
时间: 2024-01-12 19:21:51 浏览: 75
以下是一个Java的霍夫曼文件压缩代码示例:
```java
import java.io.*;
import java.util.*;
class HuffmanNode implements Comparable<HuffmanNode> {
int frequency;
char data;
HuffmanNode left, right;
public int compareTo(HuffmanNode node) {
return this.frequency - node.frequency;
}
}
class HuffmanTree {
public static void compressFile(String inputFile, String outputFile) {
try {
// 读取输入文件
FileInputStream fis = new FileInputStream(inputFile);
byte[] inputBytes = new byte[(int) fis.available()];
fis.read(inputBytes);
fis.close();
// 统计字符频率
Map<Character, Integer> frequencyMap = new HashMap<>();
for (byte b : inputBytes) {
char c = (char) b;
frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1);
}
// 构建霍夫曼树
PriorityQueue<HuffmanNode> pq = new PriorityQueue<>();
for (Map.Entry<Character, Integer> entry : frequencyMap.entrySet()) {
HuffmanNode node = new HuffmanNode();
node.data = entry.getKey();
node.frequency = entry.getValue();
pq.add(node);
}
while (pq.size() > 1) {
HuffmanNode left = pq.poll();
HuffmanNode right = pq.poll();
HuffmanNode newNode = new HuffmanNode();
newNode.frequency = left.frequency + right.frequency;
newNode.left = left;
newNode.right = right;
pq.add(newNode);
}
HuffmanNode root = pq.poll();
// 构建霍夫曼编码表
Map<Character, String> codeMap = new HashMap<>();
buildCodeMap(root, "", codeMap);
// 压缩文件
StringBuilder compressedData = new StringBuilder();
for (byte b : inputBytes) {
char c = (char) b;
compressedData.append(codeMap.get(c));
}
// 写入输出文件
FileOutputStream fos = new FileOutputStream(outputFile);
fos.write(compressedData.toString().getBytes());
fos.close();
System.out.println("文件压缩成功!");
} catch (IOException e) {
e.printStackTrace();
}
}
private static void buildCodeMap(HuffmanNode node, String code, Map<Character, String> codeMap) {
if (node == null) {
return;
}
if (node.left == null && node.right == null) {
codeMap.put(node.data, code);
}
buildCodeMap(node.left, code + "0", codeMap);
buildCodeMap(node.right, code + "1", codeMap);
}
}
public class HuffmanTreeTest {
public static void main(String[] args) {
String inputFile = "text.txt";
String outputFile = "compressed.txt";
HuffmanTree.compressFile(inputFile, outputFile);
}
}
```
阅读全文
相关推荐


















