/*
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
This package provides methods to read files from a JAR file and to
transform them to a more compact transfer format called Pack200.
It also provides methods to receive the transmitted data and expand
it into a JAR file equivalent to the original JAR file.
The pack
methods may be used by application developers who wish to deploy large JARs on the web. The unpack
methods may be used by deployment applications such as Java Web Start and Java Plugin.
In typical use, the packed output should be further compressed using a suitable tool such as gzip or java.util.zip.GZIPOutputStream
. The resulting file (with a suffix ".pack.gz") should be hosted on a HTTP/1.1 compliant server, which will be capable of handling "Accept-Encoding", as specified by the HTTP 1.1 RFC2616 specification.
NOTE: It is recommended that the original ".jar" file be
hosted in addition to the ".pack.gz" file, so that older client
implementations will continue to work reliably. (On-demand
compression by the server is not recommended.)
When a client application requests a ".jar" file (call it
"Large.jar"), the client will transmit the headers
"Content-Type=application/x-java-archive" as well as
"Accept-Encoding=pack200-gzip". This indicates to the server that
the client application desires an version of the file encoded with
Pack200 and further compressed with gzip.
The server implementation will typically check for the existence of
"Large.pack.gz". If that file is available, the server will
transmit it with the headers "Content-Encoding=pack200-gzip" and
"Content-Type=application/x-java-archive".
If the ".pack.gz" file, is not available, then the server will
transmit the original ".jar" with "Content-Encoding=null" and
"Content-Type=application/x-java-archive".
A MIME type of "application/x-java-pack200" may be specified by the
client application to indicate a ".pack" file is required.
However, this has limited capability, and is not recommended.
Package Specification
Network Transfer Format Specification :
http://jcp.org/en/jsr/detail?id=200
Related Documentation
For overviews, tutorials, examples, guides, and tool documentation, please
see:
-
Jar File Specification :
http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html
-
Class File Specification: Chapter 4 of
The Java™ Virtual Machine Specification
-
Hypertext Transfer Protocol -- HTTP/1.1 :
http://www.ietf.org/rfc/rfc2616.txt
Since: 1.5
/**
* This package provides methods to read files from a JAR file and to
* transform them to a more compact transfer format called Pack200.
* It also provides methods to receive the transmitted data and expand
* it into a JAR file equivalent to the original JAR file.
*
* <p>
* The {@code pack} methods may be used by application developers who
* wish to deploy large JARs on the web. The {@code unpack} methods
* may be used by deployment applications such as Java Web Start and
* Java Plugin.
*
* <p>
* In typical use, the packed output should be further compressed
* using a suitable tool such as gzip or
* {@code java.util.zip.GZIPOutputStream}. The resulting file (with
* a suffix ".pack.gz") should be hosted on a HTTP/1.1 compliant
* server, which will be capable of handling "Accept-Encoding", as
* specified by the HTTP 1.1 RFC2616 specification.
*
* <p>
* <b>NOTE:</b> It is recommended that the original ".jar" file be
* hosted in addition to the ".pack.gz" file, so that older client
* implementations will continue to work reliably. (On-demand
* compression by the server is not recommended.)
*
* <p>
* When a client application requests a ".jar" file (call it
* "Large.jar"), the client will transmit the headers
* "Content-Type=application/x-java-archive" as well as
* "Accept-Encoding=pack200-gzip". This indicates to the server that
* the client application desires an version of the file encoded with
* Pack200 and further compressed with gzip.
*
* <p>
* The server implementation will typically check for the existence of
* "Large.pack.gz". If that file is available, the server will
* transmit it with the headers "Content-Encoding=pack200-gzip" and
* "Content-Type=application/x-java-archive".
*
* <p>
* If the ".pack.gz" file, is not available, then the server will
* transmit the original ".jar" with "Content-Encoding=null" and
* "Content-Type=application/x-java-archive".
*
* <p>
* A MIME type of "application/x-java-pack200" may be specified by the
* client application to indicate a ".pack" file is required.
* However, this has limited capability, and is not recommended.
*
* <h2> Package Specification</h2>
* Network Transfer Format Specification :<a href="http://jcp.org/en/jsr/detail?id=200">
* http://jcp.org/en/jsr/detail?id=200</a>
*
* <h2> Related Documentation</h2>
* For overviews, tutorials, examples, guides, and tool documentation, please
* see:
* <ul>
*
* <li>
* Jar File Specification :<a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html">
* http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html</a></li>
*
* <li>
* Class File Specification: Chapter 4 of
* <em>The Java™ Virtual Machine Specification</em>
*
* <li>
* Hypertext Transfer Protocol -- HTTP/1.1 : <a href="http://www.ietf.org/rfc/rfc2616.txt">
* http://www.ietf.org/rfc/rfc2616.txt
* </ul>
*
* <li>
* @since 1.5</li>
*/
package com.sun.java.util.jar.pack;