📄 lzw.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 + -