代码拉取完成,页面将自动刷新
package HuffmanTest;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class huffmanCoding
{
public static void main(String[] args) throws IOException {
File file = new File("C:\\Users\\user\\IdeaProjects\\socialsea\\socialsea\\src\\HuffmanTest\\readFile");
Scanner scan = new Scanner(file);
String s = scan.nextLine();
System.out.println(s);
int[] array = new int[26];
for (int i = 0; i < array.length; i++) {
array[i] = 0;
}
for (int i = 0; i < s.length(); i++) {
char x = s.charAt(i);
array[x - 'a']++;
}
System.out.println("各字母出现频率:");
for (int i = 0; i < array.length; i++) {
System.out.print((char)('a'+i)+":"+(double) array[i] / s.length()+" ");
}
huffmanNode[] huffmanTreeNodes = new huffmanNode[array.length];
for (int i = 0; i < array.length; i++) {
huffmanTreeNodes[i] = new huffmanNode(array[i], (char) ('a' + i), null, null, null);
}
huffmanTree huffmanTree = new huffmanTree(huffmanTreeNodes);
System.out.println();
System.out.println("打印哈夫曼树:");
System.out.println(huffmanTree.toString());
System.out.println("各字母的编码");
String[] codes = huffmanTree.getEncoding();
for (int i = 0; i < codes.length; i++) {
System.out.println((char) ('a' + i) + ":" + codes[i]);
}
//进行编码:
String result = "";
for (int i = 0; i < s.length(); i++) {
int x = s.charAt(i) - 'a';
result += codes[x];
}
System.out.println("编码结果:"+result);
//写入文件
File file1 = new File("C:\\Users\\user\\IdeaProjects\\socialsea\\socialsea\\src\\HuffmanTest\\codeResult");
FileWriter fileWriter = new FileWriter(file1);
fileWriter.write(result);
fileWriter.close();
//从文件读取
Scanner scan1 = new Scanner(file1);
String s1 = scan1.nextLine();
huffmanNode huffmanTreeNode = huffmanTree.getRoot();
//进行解码
String result2 = "";
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) == '0') {
if (huffmanTreeNode.getLeft() != null) {
huffmanTreeNode = huffmanTreeNode.getLeft();
}
} else {
if (s1.charAt(i) == '1') {
if (huffmanTreeNode.getRight() != null) {
huffmanTreeNode = huffmanTreeNode.getRight();
}
}
}
if (huffmanTreeNode.getLeft() == null && huffmanTreeNode.getRight() == null) {
result2 += huffmanTreeNode.getElement();
huffmanTreeNode = huffmanTree.getRoot();
}
}
System.out.println("解码结果:"+result2);
//写入文件
File file2 = new File("C:\\Users\\user\\IdeaProjects\\socialsea\\socialsea\\src\\HuffmanTest\\decodeResult");
FileWriter fileWriter1 = new FileWriter(file2);
fileWriter1.write(result2);
fileWriter1.close();
// 判断解码是否正确
System.out.println("解码是否正确:"+result2.equals(s));
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。