資源簡介
自己寫的LZW壓縮。因為自己搜這方面資料時,基本一個樣,所以決定把自己分享下。

代碼片段和文件信息
package?ebk.aem.test;
import?java.io.BufferedInputStream;
import?java.io.BufferedOutputStream;
import?java.io.BufferedWriter;
import?java.io.DataOutputStream;
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileOutputStream;
import?java.io.FileReader;
import?java.io.FileWriter;
import?java.util.Random;
public?class?LZWCompressions?{
private?short[]?code_value;
private?short[]?prefix;
private?short[]?suffix;
private?int?BITS;
private?final?int?TABLESIZE;
private?final?short?SHIFT?=4;
private?final?int?MAX_CODE;
BufferedOutputStream?bos;
public?LZWCompressions()
{
this(12);
}
public?LZWCompressions(int?bits)
{
this.BITS?=?bits;
if(BITS?<=?12)
TABLESIZE?=?4096;
else?if(BITS?==?13)
TABLESIZE?=?8192;
else
TABLESIZE?=?16384;
code_value?=?new?short[TABLESIZE];
prefix?=?new?short[TABLESIZE];
suffix?=?new?short[TABLESIZE];
MAX_CODE?=?(1?< }
public?void?Coding(File?inpathFile?outpath)
{
try?{
FileInputStream?fis?=?new?FileInputStream(inpath);
BufferedInputStream?bis?=?new?BufferedInputStream(fis);
FileOutputStream?fos?=?new?FileOutputStream(outpath);
DataOutputStream?dos?=?new?DataOutputStream(fos);
short?old_value?=?0;
short?new_value?=?0;
short?next_code?=?256;
for(short?i?=?0?;i {
code_value[i]=?-1;
prefix[i]?=?-1;
suffix[i]?=?-1;
}
if(bis.available()?>?0)
{
old_value?=(short)?bis.read();
while((new_value?=?(short)bis.read())?!=?-1)
{
// System.out.println(“old_value“+old_value);
// System.out.println(new_value);
short?index?=?FindMatch(old_valuenew_value);
if(code_value[index]?!=?-1)
{
old_value?=?code_value[index];
}
else{
if(next_code?<=?MAX_CODE)?/*because?next_code?will?be?index(下標),next_code?can‘t?be?greater?the?largest?index?of?the?array?*/
{
prefix[index]?=?old_value;
suffix[index]?=?new_value;
code_value[index]?=?next_code++;
}
dos.writeShort(old_value);?
// System.out.println(old_value);
old_value?=?new_value;??????/*assign?the?new_value?to?old_value?when?next_code>MAX_CODE*/
}
}
?dos.writeShort(old_value);
// ?System.out.println(old_value);
}
dos.close();
bis.close();
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
/**
?*?Quadratic?linear?hash?again
?*?@param?pre
?*?@param?suf
?*?@return
?*/
private?short?FindMatch(short?preshort?suf)
{
int?index;
int?var?=?0;
int?offset?=?0;
int?di?=?1;
index?=?(suf?< boolean?flag?=?false;
while?(true)?{
if(var? {
var++;
di?=?var*var;
}
if?(code_value[index]?==?-1)
return?(short)?index;
i
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????1800054??2013-05-31?13:35??LZW壓縮\a.bmp
?????文件??????84992??2013-07-15?21:49??LZW壓縮\LZW算法說明_英文.doc
?????文件??????77824??2013-07-19?13:17??LZW壓縮\LZW算法說明中文.doc
?????文件???????3366??2013-07-19?13:04??LZW壓縮\程序源碼\LZWCompressions.java
?????文件???????4663??2013-07-19?11:44??LZW壓縮\程序源碼\LZWDeCompress.java
?????文件???????1235??2013-07-19?12:58??LZW壓縮\程序源碼\LZWTEST.java
?????文件????????613??2013-07-19?13:11??LZW壓縮\程序說明.txt
?????目錄??????????0??2013-07-19?13:16??LZW壓縮\程序源碼
?????目錄??????????0??2013-07-19?13:18??LZW壓縮
-----------?---------??----------?-----??----
??????????????1972747????????????????????9
評論
共有 條評論