Most visited

Recently visited

Added in API level 1

Pack200

public abstract class Pack200
extends Object

java.lang.Object
    java.util.jar.Pack200


以Pack200格式将JAR文件转换为压缩流或从压缩流转换。 请参阅网络传输格式JSR 200规范, 网址为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 。

摘要(Summary)

Nested classes

interface Pack200.Packer

打包器引擎对输入的JAR文件应用各种转换,使得压缩包(如gzip或zip)可高度压缩包流。

interface Pack200.Unpacker

解包器引擎将打包流转换为JAR文件。

公共方法(Public methods)

static Pack200.Packer newPacker()

获取实现Packer的类的新实例。

static Pack200.Unpacker newUnpacker()

获取实现Unpacker的类的新实例。

继承方法(Inherited methods)

From class java.lang.Object

公共方法(Public methods)

newPacker

Added in API level 1
Pack200.Packer newPacker ()

获取实现Packer的类的新实例。

  • 如果定义了系统属性java.util.jar.Pack200.Packer ,则该值将被视为具体实现类的完全限定名称,该实现类必须实现Packer。 这个类被加载并实例化。 如果此过程失败,则会引发未指定的错误。

  • 如果未使用系统属性指定实现,则系统默认实现类将被实例化,并返回结果。

  • 注意:如果多个线程同时使用它,那么返回的对象不能保证正确运行。 多线程应用程序应该分配多个打包引擎,或者使用一个引擎串行化一个锁。

    返回(Returns)
    Pack200.Packer A newly allocated Packer engine.

    newUnpacker

    Added in API level 1
    Pack200.Unpacker newUnpacker ()

    获取实现Unpacker的类的新实例。

  • 如果定义了系统属性java.util.jar.Pack200.Unpacker ,则该值将被视为具体实现类的完全限定名称,该实现类必须实现解包器。 该类被加载并实例化。 如果此过程失败,则会引发未指定的错误。

  • 如果未使用系统属性指定实现,则系统默认实现类将被实例化,并返回结果。

  • 注意:如果多个线程同时使用它,那么返回的对象不能保证正确运行。 多线程应用程序应该分配多个解包器引擎,或者使用一个引擎序列化一个锁。

    返回(Returns)
    Pack200.Unpacker A newly allocated Unpacker engine.

    Hooray!