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!