java.util.jar

接口
异常
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 引擎。