JavaTM 2 Platform
Standard Ed. 6

java.util.zip
類別 Deflater

java.lang.Object
  繼承者 java.util.zip.Deflater

public class Deflater
extends Object

此類別使用串流行的 ZLIB 壓縮程序資源庫為通用壓縮提供支持。ZLIB 壓縮程序資源庫最初是作為 PNG 圖形標準的一部分開發的,不受專利的保護。有關該規範的完整描述,請參見 java.util.zip 套件描述

以下程式碼片段演示使用 DeflaterInflater 壓縮和解壓縮字元串的詳細過程。

 try {
 // Encode a String into bytes
 String inputString = "blahblahblah??";
 byte[] input = inputString.getBytes("UTF-8");

 // Compress the bytes
 byte[] output = new byte[100];
 Deflater compresser = new Deflater();
 compresser.setInput(input);
 compresser.finish();
 int compressedDataLength = compresser.deflate(output);

 // Decompress the bytes
 Inflater decompresser = new Inflater();
 decompresser.setInput(output, 0, compressedDataLength);
 byte[] result = new byte[100];
 int resultLength = decompresser.inflate(result);
 decompresser.end();

 // Decode the bytes into a String
 String outputString = new String(result, 0, resultLength, "UTF-8");
 } catch(java.io.UnsupportedEncodingException ex) {
     // handle
 } catch (java.util.zip.DataFormatException ex) {
     // handle
 }
 

另請參見:
Inflater

欄位摘要
static int BEST_COMPRESSION
          最佳壓縮的壓縮級別。
static int BEST_SPEED
          最快壓縮的壓縮級別。
static int DEFAULT_COMPRESSION
          預設壓縮級別。
static int DEFAULT_STRATEGY
          預設壓縮策略。
static int DEFLATED
          deflate 演算法(當前支持的唯一演算法)的壓縮方法。
static int FILTERED
          最適用於主要由小值組成並具有某種程度隨意分佈的資料的壓縮策略。
static int HUFFMAN_ONLY
          僅適用於 Huffman 編碼的壓縮策略。
static int NO_COMPRESSION
          無壓縮的壓縮級別。
 
建構子摘要
Deflater()
          使用預設壓縮級別創建新的壓縮器。
Deflater(int level)
          使用指定壓縮級別創建新的壓縮器。
Deflater(int level, boolean nowrap)
          使用指定壓縮級別創建新的壓縮器。
 
方法摘要
 int deflate(byte[] b)
          使用壓縮資料填充指定緩衝區。
 int deflate(byte[] b, int off, int len)
          使用壓縮資料填充指定緩衝區。
 void end()
          關閉解壓縮器並放棄所有未處理的輸入。
protected  void finalize()
          回收垃圾時關閉壓縮器。
 void finish()
          調用時,指示壓縮應當以輸入緩衝區的當前內容結尾。
 boolean finished()
          如果已到達壓縮資料輸出串流的結尾,則返回 true。
 int getAdler()
          返回未壓縮資料的 ADLER-32 值。
 long getBytesRead()
          返回到目前為止輸入未壓縮位元組的總數。
 long getBytesWritten()
          返回到目前為止輸出壓縮位元組的總數。
 int getTotalIn()
          返回到目前為止輸入未壓縮位元組的總數。
 int getTotalOut()
          返回到目前為止輸出壓縮位元組的總數。
 boolean needsInput()
          如果輸入資料緩衝區為空,並且應調用 setInput() 以提供更多輸入,則返回 true。
 void reset()
          重置 deflater 以處理新的輸入資料集。
 void setDictionary(byte[] b)
          為壓縮預置字典。
 void setDictionary(byte[] b, int off, int len)
          為壓縮設置預置字典。
 void setInput(byte[] b)
          為壓縮設置輸入資料。
 void setInput(byte[] b, int off, int len)
          為壓縮設置輸入資料。
 void setLevel(int level)
          將當前壓縮級別設置為指定值。
 void setStrategy(int strategy)
          將壓縮策略設置為指定值。
 
從類別 java.lang.Object 繼承的方法
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

DEFLATED

public static final int DEFLATED
deflate 演算法(當前支持的唯一演算法)的壓縮方法。

另請參見:
常數欄位值

NO_COMPRESSION

public static final int NO_COMPRESSION
無壓縮的壓縮級別。

另請參見:
常數欄位值

BEST_SPEED

public static final int BEST_SPEED
最快壓縮的壓縮級別。

另請參見:
常數欄位值

BEST_COMPRESSION

public static final int BEST_COMPRESSION
最佳壓縮的壓縮級別。

另請參見:
常數欄位值

DEFAULT_COMPRESSION

public static final int DEFAULT_COMPRESSION
預設壓縮級別。

另請參見:
常數欄位值

FILTERED

public static final int FILTERED
最適用於主要由小值組成並具有某種程度隨意分佈的資料的壓縮策略。強制使用較多的 Huffman 編碼和較少的字元串比對。

另請參見:
常數欄位值

HUFFMAN_ONLY

public static final int HUFFMAN_ONLY
僅適用於 Huffman 編碼的壓縮策略。

另請參見:
常數欄位值

DEFAULT_STRATEGY

public static final int DEFAULT_STRATEGY
預設壓縮策略。

另請參見:
常數欄位值
建構子詳細資訊

Deflater

public Deflater(int level,
                boolean nowrap)
使用指定壓縮級別創建新的壓縮器。如果 'nowrap' 為 true,則不使用 ZLIB 頭和校驗和欄位,以便支持在 GZIP 和 PKZIP 中使用的壓縮格式。

參數:
level - 壓縮級別 (0-9)
nowrap - 如果為 true ,則使用 GZIP 相容的壓縮

Deflater

public Deflater(int level)
使用指定壓縮級別創建新的壓縮器。壓縮的資料將以 ZLIB 格式產生。

參數:
level - 壓縮級別 (0-9)

Deflater

public Deflater()
使用預設壓縮級別創建新的壓縮器。壓縮的資料將以 ZLIB 格式產生。

方法詳細資訊

setInput

public void setInput(byte[] b,
                     int off,
                     int len)
為壓縮設置輸入資料。此方法應該在 needsInput() 返回 true 時調用,以指示需要更多的輸入資料。

參數:
b - 輸入資料位元組
off - 資料的初始偏移量
len - 資料的長度
另請參見:
needsInput()

setInput

public void setInput(byte[] b)
為壓縮設置輸入資料。此方法應該在 needsInput() 返回 true 時調用,以指示需要更多的輸入資料。

參數:
b - 輸入資料位元組
另請參見:
needsInput()

setDictionary

public void setDictionary(byte[] b,
                          int off,
                          int len)
為壓縮設置預置字典。預置字典在歷史緩衝區可預定時使用。當以後使用 Inflater.inflate() 取消壓縮資料時,可以調用 Inflater.getAdler() 來獲取解壓縮所需字典的 Adler-32 值。

參數:
b - 字典資料位元組
off - 資料的初始偏移量
len - 資料的長度
另請參見:
Inflater.inflate(byte[], int, int), Inflater.getAdler()

setDictionary

public void setDictionary(byte[] b)
為壓縮預置字典。預置字典在歷史緩衝區可預定時使用。當以後使用 Inflater.inflate() 取消壓縮資料時,可以調用 Inflater.getAdler() 來獲取解壓縮所需字典的 Adler-32 值。

參數:
b - 字典資料位元組
另請參見:
Inflater.inflate(byte[], int, int), Inflater.getAdler()

setStrategy

public void setStrategy(int strategy)
將壓縮策略設置為指定值。

參數:
strategy - 新的壓縮策略
拋出:
IllegalArgumentException - 如果壓縮策略無效

setLevel

public void setLevel(int level)
將當前壓縮級別設置為指定值。

參數:
level - 新的壓縮級別 (0-9)
拋出:
IllegalArgumentException - 如果壓縮級別無效

needsInput

public boolean needsInput()
如果輸入資料緩衝區為空,並且應調用 setInput() 以提供更多輸入,則返回 true。

返回:
如果輸入資料緩衝區為空,並且應調用 setInput() 以提供更多輸入,則返回 true

finish

public void finish()
調用時,指示壓縮應當以輸入緩衝區的當前內容結尾。


finished

public boolean finished()
如果已到達壓縮資料輸出串流的結尾,則返回 true。

返回:
如果已到達壓縮資料輸出串流的結尾,則返回 true

deflate

public int deflate(byte[] b,
                   int off,
                   int len)
使用壓縮資料填充指定緩衝區。返回壓縮資料的實際位元組數。返回值為 0 指示應調用 needsInput() 來確定是否需要更多的輸入資料。

參數:
b - 壓縮資料的緩衝區
off - 資料的初始偏移量
len - 壓縮資料的最大位元組數
返回:
壓縮資料的實際位元組數

deflate

public int deflate(byte[] b)
使用壓縮資料填充指定緩衝區。返回壓縮資料的實際位元組數。返回值為 0 指示應調用 needsInput() 來確定是否需要更多的輸入資料。

參數:
b - 壓縮資料的緩衝區
返回:
壓縮資料的實際位元組數

getAdler

public int getAdler()
返回未壓縮資料的 ADLER-32 值。

返回:
未壓縮資料的 ADLER-32 值

getTotalIn

public int getTotalIn()
返回到目前為止輸入未壓縮位元組的總數。

由於該位元組數可能大於 Integer.MAX_VALUE,因此 getBytesRead() 方法現在是獲取此資訊的首選方法。

返回:
到目前為止輸入未壓縮位元組的總數

getBytesRead

public long getBytesRead()
返回到目前為止輸入未壓縮位元組的總數。

返回:
到目前為止輸入未壓縮位元組的總數(非負)
從以下版本開始:
1.5

getTotalOut

public int getTotalOut()
返回到目前為止輸出壓縮位元組的總數。

由於該位元組數可能大於 Integer.MAX_VALUE,因此 getBytesWritten() 方法現在是獲取此資訊的首選方法。

返回:
到目前為止輸出壓縮位元組的總數

getBytesWritten

public long getBytesWritten()
返回到目前為止輸出壓縮位元組的總數。

返回:
到目前為止輸出壓縮位元組的總數(非負)
從以下版本開始:
1.5

reset

public void reset()
重置 deflater 以處理新的輸入資料集。保持當前壓縮級別和策略設置。


end

public void end()
關閉解壓縮器並放棄所有未處理的輸入。此方法應該在不再使用該壓縮器時調用,但是也可以由 finalize() 方法自動調用。調用此方法後,Deflater 物件的行為將是不確定的。


finalize

protected void finalize()
回收垃圾時關閉壓縮器。

覆寫:
類別 Object 中的 finalize

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only