《壓縮》的總結

2021-08-27 04:29:11 字數 2268 閱讀 8835

哈夫曼壓縮:

1、讀取檔案,並統計檔案中各字元出現的次數,儲存到乙個陣列中,陣列長度為256,然後每個索引都代表字元的ascii碼所代表的值,每當多乙個,就在這個索引下的值加一。**如下:

public void output() 

// 關閉流

bs.close();

is.close();

} catch (filenotfoundexception e) catch (ioexception e)

}

2、對這個陣列裡的值進行排序(採用優先佇列)

①迴圈建立節點,節點裡存放ascii碼和此ascii出現的次數

②優先佇列裡存放節點

③優先佇列的排序方法通過繼承comparable介面來實現

**如下:

public void creatthree() 

}

3、構建乙個哈夫曼樹,並獲取每個字元對應的碼表

①首先從優先佇列裡獲得2個最少出現的字元,並從佇列中移除這兩個

②然後構建乙個小樹,生成乙個父節點,父節點的次數為這兩個字元次數的合,並把這個父節點新增到優先佇列裡

③以此類推構建完哈夫曼樹

④每乙個父節點的左邊路徑作為0,右邊路徑作為1,然後生成每個字元所對應的碼表

**如下

// 構建哈夫曼樹

while (node_queue.size() > 1)

// 設定根節點

root = node_queue.peek();

}

/**

* 給每個葉子節點新增碼表值

* * @param node

*/public void println(hfmnode node) else

}

4、寫入檔案

①寫入頭資訊

i、寫入字元

ii、寫入該字元編碼所佔的位元組數

ⅲ、每個字元對應的碼表補了多少個0(補滿8位)

ⅳ、寫入每個字元所對應的碼表

for (int i = 0; i < node_all.length; i++) 

//轉換成整型寫入檔案

int x = changestring(trans);

// 寫入轉換後的整型

bos.write(x);

// 中轉字串清空

trans = "";

// 迴圈獲得除去前八位後剩下的字元

for (int k = 8; k < writes.length(); k++)

// 把原先的字串覆蓋掉

writes = trans;

// 中轉字串清空

trans = "";

}}

②寫入檔案內容

ⅰ、把所有的字元轉化成01串,每8位乙個位元組寫入檔案

ⅱ、最後不足八位則補零,然後寫入補零個數

// 遍歷讀取檔案內容,並寫入檔案

for (int i = 0; i < length; i++)

} // 如果此時的字串位數大於等於8

if (str_matter.length() >= 8)

// 把這8位字串轉化成整形

int a = changestring(str_trans);

// 寫入轉換後的整型

bos.write(a);

// 清空轉換字串

str_trans = "";

// 迴圈獲得除去前八位後剩下的字元

for (int j = 8; j < str_matter.length(); j++)

// 把原先的字串覆蓋掉

str_matter = str_trans;

// 清空轉換字串

str_trans = "";

} }// 如果沒有滿八位,則補上0

while (str_matter.length() % 8 != 0)

// 判斷補零後的字串是否為空

if (str_matter.equals("")) // 把這8位字串轉化成整形

else

// 寫入補零計數器

string so = integer.tostring(addzero);

bos.write((int) so.charat(0));

壓縮解壓總結

壓縮 1 掃瞄需要壓縮的檔案進行讀取 注意file file file2 reader reader null try reader.close catch exception e 2 裡用哈夫曼樹對於讀取的檔案進行翻譯成01串 hafumannode root new hafumannode nu...

linux壓縮總結

linux壓縮總結 1 tar tar zcvf test.tar.gz test 壓縮 tar zxvf test.tar.gz 解壓 2 gzip,zcat 命令 gzip cdt 檔名 zcat 檔名.gz 引數 c 將壓縮的資料輸出到螢幕上,可透過資料流重導向來處理 d 解壓縮的引數 t 可...

壓縮小總結

專案背景 到目前為止最糾結的的乙個專案,在寒假補課期間就整這個專案,但一直到補課完還沒完成,一直到最近才完成的。壓縮步驟 1 將要壓縮的檔案資訊乙個乙個位元組的讀出來,並統計每個位元組出現次數 2 以檔案的每個位元組的權值來構造哈夫曼樹,並給每個位元組進行哈夫曼編碼。3 將每個位元組和其對應得哈夫曼...