在記憶體中實現zip解壓縮

2021-04-12 17:26:26 字數 967 閱讀 2568

最近要完成了乙個關於解壓縮的工作,而拿到的源**是基於檔案形式。不符合專案的開發需要,所以就只有在原來的基礎上加以修改了。剛開始覺得很麻煩,後來隨著**一步步的修改和檢視,剛開始總想著要弄明白演算法的流程與思想,後來發現時間真的不夠用,到最後的修改除錯完善也只用了2天,只是弄清楚了流程與一些介面的說明,發現到最後,只要在源和尾的地方修改以後(也就是讀入檔案和輸出檔案的那部分),就可以了,畢竟寫這個演算法的牛人,把**的功能封裝已經很完善了。

在解壓時,主要是通過

#define get_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf(0));

#define try_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf(1));

這兩個巨集定義來進行,對壓縮包檔案的分析和工作,從上面可以看出,當inbuf的資料都讀完時,馬上把inbuf裡的資料更新一下,那麼我們把inbuf想象的非常大,那麼就不用從新的更新了,那麼所有的資料都在記憶體裡的那麼我把這個巨集梢微的修改了一下

#define get_byte()  (inptrdo_exit()做的是釋放記憶體的工作。

那麼相應的輸出也是很簡單的,原始的輸出是到檔案,那麼我們只要分配乙個記憶體空間,把原來的輸出到檔案的部分memcpy(des,src,length)到新的,也就相應的實現了。

在巨集定義中已經知道的很清楚了,定義如下

#define put_ubyte(c)

那麼修改flush_window();就實現了在記憶體中的輸出

而在壓縮時

修改原理基本上也和解壓時差不多

只是修改的地方不一樣了

主要是修改file_read(buf, size)這個方法,輸出也和上面的類,檢視巨集定義

#define put_byte(c)

修改flush_outbuf();

以上源**(原始版本)在www.zip.org 中可以獲取

zip解壓縮方式

解壓縮類 在導包的時候,應新增ant.jar解壓縮包 直接貼 public class ziputil public static ziputil getinstance return instance 解壓縮zip包 param zipfilepath zip檔案路徑 param targetpa...

zip命令解壓縮

解壓aa.zip到指定資料夾 unzip aa.zip d opt module aa 語法 unzip cflptuvz agcjlmnoqsvx p 密 碼 zip文 件 檔案 d 目錄 x 檔案 或 unzip z 引數說明 c 將 解壓縮的結果顯示到螢幕上,並對字元做適當的轉換。f 更 新現...

zip壓縮與解壓縮示例

範例 zip命令可以用來將檔案壓縮成為常用的zip格式。unzip命令則用來解壓縮zip檔案。1.我想把乙個檔案abc.txt和乙個目錄dir1壓縮成為yasuo.zip zip r yasuo.zip abc.txt dir1 unzip yasuo.zip 3.我當前目錄下有abc1.zip,a...