posts - 22,comments - 35,trackbacks - 0

          JDK API 中,定義了多種類型用于創(chuàng)建 ZIP 格式壓縮文件的 API 。程序設(shè)計人員在開發(fā)網(wǎng)絡(luò)應(yīng)用程序時,可以基于這些 API ,編寫將原始數(shù)據(jù)壓縮成為 ZIP 格式的壓縮數(shù)據(jù),便于網(wǎng)絡(luò)傳輸。那么, ZIP 壓縮格式的定義形式是什么呢?

          ZIP 壓縮格式是在基于互聯(lián)網(wǎng)進行數(shù)據(jù)傳輸過程中,被廣泛采用的數(shù)據(jù)文件壓縮格式。由于 ZIP 格式壓縮文件可由多個壓縮源文件構(gòu)成,因此,在單個壓縮文件內(nèi)容的最后,是整個壓縮文件的名稱和定義目錄結(jié)構(gòu)的描述內(nèi)容。在創(chuàng)建 ZIP 格式壓縮文件過程中,其文件內(nèi)容構(gòu)成為:

          [ 當前文件頭+壓縮數(shù)據(jù)+數(shù)據(jù)描述 ] . . .

          [ 目錄和文件結(jié)構(gòu) ]

          ZIP 壓縮格式的文件頭描述字段和壓縮數(shù)據(jù)描述內(nèi)容字段的名稱和占用字節(jié)數(shù)如下表所示:

          1 ZIP 格式壓縮文件文件頭和壓縮數(shù)據(jù)描述內(nèi)容

          文件頭 壓縮數(shù)據(jù)描述
          字段名稱 占用位數(shù)(字節(jié))? 字段名稱 占用位數(shù)(字節(jié))
          文件頭描述 4 文件頭描述 4
          版本類型 2 版本類型 2
          通用位標志 2 通用位標志 2
          壓縮方法 2 壓縮方法 2
          最后修改文件時間 2 最后修改文件時間 2
          最后修改文件數(shù)據(jù) 2 最后修改文件數(shù)據(jù) 2
          CRC-32 4 CRC-32 4
          壓縮字節(jié)數(shù) 4 壓縮字節(jié)數(shù) 4
          未壓縮字節(jié)數(shù) 4 未壓縮字節(jié)數(shù) 4
          文件名長度 2 文件名長度 2
          附加字段長度 2 附加字段長度 2
          文件名 可變長度 文件名 可變長度
          附加文件名 可變長度 附加文件名 可變長度

          PATH o:connecttype="rect" gradientshapeok="t" o:extrusionok="f" />SHAPE id=_x0000_i1025 style="WIDTH: 375pt; HEIGHT: 255pt" type="#_x0000_t75" alt="" />/SPAN>

          ZIP 壓縮文件中目錄和文件結(jié)構(gòu)描述內(nèi)容如下表所示:

          2 ZIP 格式壓縮文件目錄結(jié)構(gòu)描述內(nèi)容

          文件構(gòu)成信息描述 目錄結(jié)構(gòu)信息
          字段名稱 占用位數(shù)(字節(jié)) 字段名稱 占用位數(shù)(字節(jié))
          文件頭描述 4 目錄結(jié)束標志 4
          版本類型 2 磁盤號 2
          可解壓縮版本類型 2 目錄開始位置的磁盤號 2
          通用位描述 2 磁盤目錄名稱 2
          壓縮方法 2 目錄結(jié)構(gòu) 2
          最后修改文件日期 2 目錄字節(jié)數(shù) 4
          最后修改文件數(shù)據(jù) 4 起始磁盤號 4
          CRC-32 4 壓縮文件描述長速度 2
          壓縮字節(jié)數(shù) 4 壓縮文件描述 可變長度
          未壓縮字節(jié)數(shù) 2
          文件名長度 2
          附加字段長度 2
          文件描述長度 2
          起始磁盤號 2
          內(nèi)部文件屬性 4
          外部文件屬性 4 附加文件名 可變
          文件頭起始位置 4 附加文件名 可變

          /SPAN>

          當然,在利用 JDK API 創(chuàng)建壓縮數(shù)據(jù)文件時,不需要詳細了解上述 ZIP 文件定義格式。但是, JDK 中定義的多種類型用于進行數(shù)據(jù)壓縮和管理的對象,正是根據(jù)上述格式實現(xiàn)數(shù)據(jù)壓縮和解壓縮的。

          2 JDK API ZIP 壓縮格式支持對象

          ZIP 壓縮格式是在 Windows 操作系統(tǒng)環(huán)境中經(jīng)常應(yīng)用的壓縮格式。 ZIP 壓縮格式的壓縮比高、壓縮速度快,因而成為利用 Java 語言定義需要在網(wǎng)絡(luò)中進行數(shù)據(jù)傳輸時,數(shù)據(jù)壓縮格式的首選。

          JDK API java.util.zip 包中,定義了多種類型用于創(chuàng)建和讀取 zip 壓縮格式文件的對象,常用對象的定義形式和主要成員方法如下:

          ●ZipEntry

          由于可以將多個文件壓縮到同一壓縮文件中,因此, JDK API 中定義的 ZipEntry 對象用于標識 ZIP 壓縮文件中每個原始文件的入口。該對象的定義結(jié)構(gòu)為:

          對象定義結(jié)構(gòu):

          java.util.zip.ZipEntry

          靜態(tài)成員變量:

          CENATT CENATX CENCRC … …

          這些靜態(tài)成員變量用于定義在壓縮過程中采用的壓縮算法。

          構(gòu)造方法:

          ZipEntry(String name) 采用字符串類型參數(shù) name 定義壓縮文件中的原始文件入口對象實例。

          ZipEntry(ZipEntry e) 采用 ZipEntry 對象類型參數(shù) e 定義壓縮文件中的原始文件入口對象實例。

          成員方法:

          long getCompressedSize() 獲取壓縮文件的大小

          void setCompressedSize(long csize) 設(shè)置壓縮文件的大小

          int getMethod() 獲取壓縮時采用的壓縮算法

          void setMethod(int method) 設(shè)置壓縮算法

          long getSize() 獲取壓縮原始文件的大小

          void setSize(long size) 設(shè)置壓縮原始文件的大小

          long getTime() 獲取壓縮文件入口標識的定義時間

          void setTime(long time) 設(shè)置壓縮文件入口標識的定義時間

          boolean isDirectory() 判斷該壓縮入口標識是否代表目錄

          String getName() 返回壓縮入口標識的名稱

          ●ZipFile

          該對象用于從 ZIP 壓縮格式文件中讀取壓縮原始文件的入口。

          對象定義結(jié)構(gòu):

          java.util.zip.ZipFile

          靜態(tài)成員變量:

          CENATT CENATX CENCRC … …

          這些靜態(tài)成員變量用于定義在壓縮過程中采用的壓縮算法。

          構(gòu)造方法:

          ZipFile(File file) File 對象代表的壓縮文件中讀取壓縮原始文件。

          ZipFile(File file, int mode) File 對象代表的壓縮文件中讀取壓縮原始文件,并且可以指定 ZIP 文件讀取模式。

          ZipFile(String name) 打開字符串參數(shù) name 表示的 ZIP 壓縮文件。

          成員方法:

          void close() 關(guān)閉被讀取的 ZIP 壓縮文件

          Enumeration entries() 枚舉出 ZIP 壓縮文件中的各個壓縮原始文件入口( Entry

          ZipEntry getEntry(String name) 獲取壓縮文件中的各個壓縮原始文件入口

          InputStream getInputStream(ZipEntry entry) 通過 ZIP 壓縮文件中的入口創(chuàng)建輸入流對象

          String getName() 獲取 ZIP 壓縮文件的名稱

          int size() 獲取壓縮文件中的入口數(shù)量

          ●ZipInputStream

          該對象用于從 ZIP 壓縮文件中創(chuàng)建輸入流對象。

          對象定義結(jié)構(gòu):

          java.util.zip.ZipInputStream

          靜態(tài)成員變量:

          CENATT CENATX CENCRC … …

          這些靜態(tài)成員變量用于定義在壓縮過程中采用的壓縮算法。

          構(gòu)造方法:

          ZipInputStream(InputStream in) 應(yīng)用輸入流對象創(chuàng)建從 ZIP 文件中讀取數(shù)據(jù)的輸入流對象。

          成員方法:

          int available() 判斷當前入口指定的壓縮原始文件中是否還有未讀數(shù)據(jù)。

          void close() 關(guān)閉 ZIP 輸入流對象

          void closeEntry() 關(guān)閉被讀取的 ZIP 入口,并移動到下一壓縮原始文件入口。

          protectedZipEntry createZipEntry(String name) 利用指定的名稱創(chuàng)建 ZipEntry 對象實例。

          ZipEntry getNextEntry() 將輸入流對象移動到下一入口對象。

          int read(byte[] b, int off, int len) 從當前 ZipEntry 中讀取字節(jié)數(shù)組。

          long skip(long n) 將輸入流指定的讀取數(shù)據(jù)位置移動 n 個字節(jié)。

          ●ZipOutputStream

          該數(shù)據(jù)輸出流對象用于創(chuàng)建 ZIP 壓縮文件。

          對象定義結(jié)構(gòu):

          java.util.zip.ZipOutputStream

          靜態(tài)成員變量:

          CENATT CENATX CENCRC … …

          這些靜態(tài)成員變量用于定義在壓縮過程中采用的壓縮算法。

          構(gòu)造方法:

          ZipOutputStream(OutputStream out) 應(yīng)用輸出流對象實例創(chuàng)建 ZIP 格式輸出流對象。

          成員方法:

          void close() 關(guān)閉 ZIP 輸出流對象。

          void closeEntry() 關(guān)閉當前 ZIP 輸出流對象指定的 Entry ,并移動到下一 Entry

          void putNextEntry(ZipEntry e) ZIP 壓縮文件中創(chuàng)建新的壓縮原始文件入口。

          void setComment(String comment) 設(shè)置壓縮文件的說明信息。

          void setMethod(int method) 設(shè)置采用的壓縮算法。

          void write(byte[] b, int off, int len) 通過 ZIP 輸出流對象向壓縮文件中輸出字節(jié)數(shù)組 b

          posted on 2006-06-05 17:48 kelven 閱讀(1768) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 马关县| 交口县| 兴山县| 紫阳县| 略阳县| 凤冈县| 榆社县| 应城市| 承德县| 五大连池市| 社旗县| 剑河县| 沙湾县| 民权县| 耒阳市| 巨野县| 苍溪县| 南城县| 即墨市| 大余县| 塔河县| 中西区| 合阳县| 汉阴县| 淄博市| 新闻| 麻江县| 霍邱县| 同心县| 安阳县| 大名县| 黄石市| 尖扎县| 克什克腾旗| 灵石县| 嘉善县| 榕江县| 贵德县| 灵丘县| 天长市| 岱山县|