java.util.jar |
Provides classes for reading and writing the JAR (Java ARchive) file
format, which is based on the standard ZIP file format with an
optional manifest file. The manifest stores meta-information about the
JAR file contents and is also used for signing JAR files.
Package Specification
The java.util.jar package is based on the following specifications:
@since 1.2
|
Java Source File Name | Type | Comment |
Attributes.java | Class | The Attributes class maps Manifest attribute names to associated string
values. |
JarEntry.java | Class | This class is used to represent a JAR file entry. |
JarException.java | Class | Signals that an error of some sort has occurred while reading from
or writing to a JAR file. |
JarFile.java | Class | The JarFile class is used to read the contents of a jar file
from any file that can be opened with java.io.RandomAccessFile .
It extends the class java.util.zip.ZipFile with support
for reading an optional Manifest entry. |
JarInputStream.java | Class | The JarInputStream class is used to read the contents of
a JAR file from any input stream. |
JarOutputStream.java | Class | The JarOutputStream class is used to write the contents
of a JAR file to any output stream. |
JarVerifier.java | Class | |
JavaUtilJarAccessImpl.java | Class | |
Manifest.java | Class | The Manifest class is used to maintain Manifest entry names and their
associated Attributes. |
Pack200.java | Class | Transforms a JAR file to or from a packed stream in Pack200 format.
Please refer to Network Transfer Format JSR 200 Specification at
http://jcp.org/aboutJava/communityprocess/review/jsr200/index.html
Typically the packer engine is used by application developers
to deploy or host JAR files on a website.
The unpacker engine is used by deployment applications to
transform the byte-stream back to JAR format.
Here is an example using packer and unpacker:
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();
}
A Pack200 file compressed with gzip can be hosted on HTTP/1.1 web servers.
The deployment applications can use "Accept-Encoding=pack200-gzip". |