⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lzw.java

📁 lzw huffman coding .
💻 JAVA
字号:
/*
 *Aluno ANDRE LUIS DURAO ABDO
 *MATRICULA: 283999
 *DATA:23/03/2006
 *CLASSE LZW
 *Lab04 (Tema: Compressao)
 */
import java.io.*;

class LZW {

	public static void main (String[] args) throws IOException {
		if (!args[0].equals("")){
			comprime(args[0]);
			descomprime("output.dat");
		}
	}

	private static void comprime (String nomearq) {
		int atual, cont;
		String[] dicionario = new String[65536];
		for (cont = 0; cont < 256; cont++)
			dicionario[cont] = "" + (char) cont;
		try {
			FileReader fr = new FileReader(nomearq);
			FileOutputStream tw = new FileOutputStream("output.dat");
			DataOutputStream fw = new DataOutputStream(tw);
			String str = "";
			int last = 0;
			while ((atual = fr.read()) != -1) {
				str += "" + (char) atual;
				boolean adiciona = true;
				for (int i = 0; i < cont; i++) {
					if (dicionario[i].equals(str)) {
						adiciona = false;
						last = i;
					}
				}
				if (adiciona) {
					fw.writeByte((byte) (last / 256)); fw.writeByte((byte) (last % 256));
					fw.writeByte((byte) atual);
					if (cont >= 65536)
						cont = 0;
					dicionario[cont] = str;
					cont++;
					str = "";
					last = 0;
				}
			}
			fw.writeByte((byte) -1);
			fr.close(); fw.close(); tw.close();
			System.out.println("Arquivo de texto comprimido para output.dat");
		} catch (FileNotFoundException fnfE) {
			System.out.println("Arquivo nao encontrado.");
		} catch (IOException IOE) {
			System.out.println("Excecao IO.");
		}
	}

	private static void descomprime (String nomearq) {
		byte[] b = new byte[3];
		int cont;
		int[] indice = new int[65536];
		String[] dicionario = new String[65536];
		for (cont = 0; cont < 256; cont++)
			dicionario[cont] = "" + (char) cont;
		try {
			FileInputStream tr = new FileInputStream(nomearq);
			DataInputStream fr = new DataInputStream(tr);
			FileWriter fw = new FileWriter("input.txt");

			while ((b[0] = fr.readByte()) != -1) {
				b[1] = fr.readByte(); b[2] = fr.readByte();
				int t1 = (int) ((b[0] * 256) + b[1]);
				int t2 = (int) b[2];
				if (cont >= 65536)
					cont = 0;
				dicionario[cont] = "" + dicionario[t1] + "" + dicionario[t2];
				cont++;
				fw.write(dicionario[t1]);
				fw.write(dicionario[t2]);
			}
			fr.close(); fw.close(); tr.close();
			System.out.println("Arquivo de texto decomprimido para input.txt");
		} catch (FileNotFoundException fnfE) {
			System.out.println("Arquivo nao encontrado.");
		} catch (IOException IOE) {
			System.out.println("Excecao IO.");
		}
	} 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -