JavaTM 2 Platform
Standard Ed. 6

java.util.jar
類別 Pack200

java.lang.Object
  繼承者 java.util.jar.Pack200

public abstract class Pack200
extends Object

以 Pack200 格式在 JAR 檔案和打套件的串流之間進行轉換。請參閱以下網址的 Network Transfer Format JSR 200 Specification:http://jcp.org/aboutJava/communityprocess/review/jsr200/index.html。

通常,應用程序開發人員使用打包器引擎在網站上部署或宿主 JAR 檔案。部署應用程序則使用解包器引擎把位元組串流轉換回 JAR 格式。

下面是使用打包器和解包器的一個範例:

    import java.util.jar.Pack200;
    import java.util.jar.Pack200.*;
    ...
    // Create the Packer object
    Packer packer = Pack200.newPacker();

    // Initialize the state by setting the desired properties
    Map p = packer.properties();
    // take more time choosing codings for better compression
    p.put(Packer.EFFORT, "7");  // default is "5"
    // use largest-possible archive segments (>10% better compression).
    p.put(Packer.SEGMENT_LIMIT, "-1");
    // reorder files for better compression.
    p.put(Packer.KEEP_FILE_ORDER, Packer.FALSE);
    // smear modification times to a single value.
    p.put(Packer.MODIFICATION_TIME, Packer.LATEST);
    // ignore all JAR deflation requests,
    // transmitting a single request to use "store" mode.
    p.put(Packer.DEFLATE_HINT, Packer.FALSE);
    // discard debug attributes
    p.put(Packer.CODE_ATTRIBUTE_PFX+"LineNumberTable", Packer.STRIP);
    // throw an error if an attribute is unrecognized
    p.put(Packer.UNKNOWN_ATTRIBUTE, Packer.ERROR);
    // pass one class file uncompressed:
    p.put(Packer.PASS_FILE_PFX+0, "mutants/Rogue.class");
    try {
        JarFile jarFile = new JarFile("/tmp/testref.jar");
        FileOutputStream fos = new FileOutputStream("/tmp/test.pack");
        // Call the packer
        packer.pack(jarFile, fos);
        jarFile.close();
        fos.close();
        
        File f = new File("/tmp/test.pack");
        FileOutputStream fostream = new FileOutputStream("/tmp/test.jar");
        JarOutputStream jostream = new JarOutputStream(fostream);
        Unpacker unpacker = Pack200.newUnpacker();
        // Call the unpacker
        unpacker.unpack(f, jostream);
        // Must explicitly close the output.
        jostream.close();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
 

用 gzip 壓縮的 Pack200 檔案可以宿主在 HTTP/1.1 Web 伺服器上。部署應用程序可以使用 "Accept-Encoding=pack200-gzip"。這向伺服器指示客戶機應用程序需要的是用 Pack200 編碼並用 gzip 進一步壓縮的檔案版本。有關細節和技術的更多資訊,請參閱 Java Deployment Guide

除非另行說明,否則將 null 參數傳遞給此類別中的建構子或方法都會拋出 NullPointerException

從以下版本開始:
1.5

巢狀類別摘要
static interface Pack200.Packer
          打包器引擎把各種轉換應用到輸入 JAR 檔案,從而可以通過壓縮器(如 gzip 或 zip)高度壓縮打包串流。
static interface Pack200.Unpacker
          解包器引擎將打套件的串流轉換為 JAR 檔案。
 
方法摘要
static Pack200.Packer newPacker()
          獲取一個實作 Packer 的新的類別實例。
static Pack200.Unpacker newUnpacker()
          獲取一個實作 Unpacker 的新的類別實例。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

方法詳細資訊

newPacker

public static Pack200.Packer newPacker()
獲取一個實作 Packer 的新的類別實例。
  • 如果定義了系統屬性 java.util.jar.Pack200.Packer,那麼該值將為具體實作類別(必須實作 Packer)的完全限定名稱。載入並實例化此類別。如果此進程失敗,則拋出未指定錯誤。

  • 如果尚未用系統屬性指定實作,那麼實例化系統預設的實作類別並返回結果。

  • 註:如果多個執行緒同時使用返回的物件,則無法保證返回的物件操作正確。多執行緒應用程序應該分派多個打包器引擎,或者利用一個鎖來順序使用一個引擎。

    返回:
    新分派的 Packer 引擎。

    newUnpacker

    public static Pack200.Unpacker newUnpacker()
    獲取一個實作 Unpacker 的新的類別實例。
  • 如果定義了系統屬性 java.util.jar.Pack200.Unpacker,那麼該值將為具體實作類別(必須實作 Unpacker)的完全限定名稱。載入並實例化此類別。如果此進程失敗,則拋出未指定錯誤。

  • 如果尚未用系統屬性指定實作,那麼實例化系統預設的實作類別並返回結果。

  • 註:如果多個執行緒同時使用返回的物件,則無法保證返回的物件操作正確。多執行緒應用程序應該分派多個解包器引擎,或者利用一個鎖來順序使用一個引擎。

    返回:
    新分派的 Unpacker 引擎。

    JavaTM 2 Platform
    Standard Ed. 6

    提交錯誤或意見

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