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 。
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) |
|
|---|---|
java.lang.Object
|
|
Pack200.Packer newPacker ()
获取实现Packer的类的新实例。
如果定义了系统属性java.util.jar.Pack200.Packer ,则该值将被视为具体实现类的完全限定名称,该实现类必须实现Packer。 这个类被加载并实例化。 如果此过程失败,则会引发未指定的错误。
如果未使用系统属性指定实现,则系统默认实现类将被实例化,并返回结果。
注意:如果多个线程同时使用它,那么返回的对象不能保证正确运行。 多线程应用程序应该分配多个打包引擎,或者使用一个引擎串行化一个锁。
| 返回(Returns) | |
|---|---|
Pack200.Packer |
A newly allocated Packer engine. |
Pack200.Unpacker newUnpacker ()
获取实现Unpacker的类的新实例。
如果定义了系统属性java.util.jar.Pack200.Unpacker ,则该值将被视为具体实现类的完全限定名称,该实现类必须实现解包器。 该类被加载并实例化。 如果此过程失败,则会引发未指定的错误。
如果未使用系统属性指定实现,则系统默认实现类将被实例化,并返回结果。
注意:如果多个线程同时使用它,那么返回的对象不能保证正确运行。 多线程应用程序应该分配多个解包器引擎,或者使用一个引擎序列化一个锁。
| 返回(Returns) | |
|---|---|
Pack200.Unpacker |
A newly allocated Unpacker engine. |