public static interface Pack200.Packer
Pack200.newPacker()
を使用して取得できます。高度な圧縮は、JSR 200仕様で説明されている多数のテクニックを使用して実現されます。これらの技術には、定数プールのソート、再順序付け、および同位置への配置が含まれます。
packエンジンは、初期化されると、次に示すプロパティで規定された初期状態になります。初期状態を操作するには、(properties()
を使用して)エンジン・プロパティを取得してから、修正したプロパティをマップに格納します。リソース・ファイルは、一切変更なしで渡されます。unpackerは、定数プール順などの一般的ではないクラス・ファイル機能に自由に変更できるため、クラス・ファイルには同一のバイトは含まれません。ただし、『Java(tm)仮想マシン仕様』で指定されているように、これらのクラス・ファイルは意味的に同一です。
デフォルトでは、packerがJAR要素の順序を変更することはありません。また、各JAR要素の修正時間およびデフレーション・ヒントは、変更を加えられずに渡されます(Unixファイルのアクセス権を付与する追加属性などの、ほかのZIPアーカイブ情報は失われる)。
一般に、JARのパックおよび展開により、JARのクラス・ファイル内にあるバイト単位のコンテンツが変更されます。これは、通常、パックおよび展開により、JAR要素のバイト単位イメージに依存するデジタル署名がすべて無効になることを意味します。JARの署名とパックの両方を実行するためには、最初にJARのパックと展開を実行して「正規化」してから、展開されたJAR要素上の署名を計算し、最後に署名済みのJARを再パックする必要があります。両方のパック手順で正確に同じオプションを使用してください。また、クラス・ファイルのサイズは微妙に変化するため、セグメント境界を意図せずに変更してしまうことを避けるために、セグメント制限を「-1」に設定することが必要な場合もあります。
(このように行える理由: パック・プログラムが実行するクラス・ファイル構造の再配置はべき等であるため、2回目のパックでは、最初のパックで生成された順序が変更されない。またアンパック・プログラムでは、どのようなアーカイブ要素の伝送順序に対しても特定のバイト・イメージを生成することが、JSR 200仕様で保証されている)
下位互換性を保持するために、パック・ファイルのバージョンは、入力JARファイルにあるクラス・ファイルに適合するよう設定されます。つまり、クラス・ファイルが最新であればパック・ファイルのバージョンも最新となり、反対に、クラス・ファイルのバージョンがもっとも古い場合は、パック・ファイルのバージョンも、もっとも古くなるということです。中間のクラス・ファイルのバージョンについては、対応するパック・ファイルのバージョンが使用されます。たとえば、入力JARファイルが1.5 (またはそれ未満の)クラス・ファイルでのみ構成される場合は、1.5と互換性のあるパック・ファイルが生成されます。これは、クラス・ファイルのないアーカイブにも該当します。入力JARファイルに1.6クラス・ファイルが含まれる場合、パック・ファイルのバージョンは1.6に設定されます。
注: ほかで指定がない場合、null引数をコンストラクタ、またはこのクラスのメソッドへ渡すとNullPointerException
がスローされます。
修飾子と型 | フィールドと説明 |
---|---|
static String |
CLASS_ATTRIBUTE_PFX
クラス属性名に連結された場合、JSR 200仕様で指定されたレイアウト言語を使用して、その属性の形式を示します。
|
static String |
CODE_ATTRIBUTE_PFX
コード属性名と連結して使用された場合、属性の形式を示します。
|
static String |
DEFLATE_HINT
|
static String |
EFFORT
このプロパティが1桁の10進数に設定されると、packerは指定された量の労力をアーカイブの圧縮に費やします。
|
static String |
ERROR
文字列「error」は、特定のプロパティで使用できます。
|
static String |
FALSE
文字列「false」は、特定のプロパティで使用できます。
|
static String |
FIELD_ATTRIBUTE_PFX
フィールド属性名と連結して使用された場合、属性の形式を示します。
|
static String |
KEEP
文字列「keep」は、特定のプロパティで使用できます。
|
static String |
KEEP_FILE_ORDER
このプロパティが
TRUE に設定されると、packerはソース・アーカイブ内のすべての要素を元の順序で転送します。 |
static String |
LATEST
文字列「latest」は、特定のプロパティで使用できます。
|
static String |
METHOD_ATTRIBUTE_PFX
メソッド属性名と連結して使用された場合、属性の形式を示します。
|
static String |
MODIFICATION_TIME
このプロパティが特殊な文字列
LATEST に設定されると、packerは、元のアーカイブ内の利用可能な全エントリ内で最新の修正時間、または各セグメント内の利用可能な全エントリの最新の修正時間の決定を試みます。 |
static String |
PASS
文字列「pass」は、特定のプロパティで使用できます。
|
static String |
PASS_FILE_PFX
ファイルを圧縮せずにバイト単位で渡すことを示します。
|
static String |
PROGRESS
unpackerの進捗状況をパーセントで示します。状況は、unpackerにより周期的に更新されます。
|
static String |
SEGMENT_LIMIT
このプロパティは、各アーカイブ要素の推定ターゲット・サイズN (単位はバイト)を付与する数値です。
|
static String |
STRIP
文字列「strip」は、特定のプロパティで使用できます。
|
static String |
TRUE
文字列「true」は、特定のプロパティで使用できます。
|
static String |
UNKNOWN_ATTRIBUTE
不明な属性を含むクラス・ファイルに遭遇したときに実行するアクションを示します。
|
修飾子と型 | メソッドと説明 |
---|---|
default void |
addPropertyChangeListener(PropertyChangeListener listener)
非推奨。
PropertyChangeListener への依存は、Javaプラットフォームの将来のモジュール化に対する大きな障害になります。このメソッドは今後のリリースで削除される予定です。packerの進捗をモニターする必要があるアプリケーションは、代わりにPROGRESS プロパティの値をポーリングすることができます。 |
void |
pack(JarFile in, OutputStream out)
JarFileを取得して、Pack200アーカイブに変換します。
|
void |
pack(JarInputStream in, OutputStream out)
JarInputStreamを取得して、Pack200アーカイブに変換します。
|
SortedMap<String,String> |
properties()
このエンジンのプロパティ・セットを取得します。
|
default void |
removePropertyChangeListener(PropertyChangeListener listener)
非推奨。
PropertyChangeListener への依存は、Javaプラットフォームの将来のモジュール化に対する大きな障害になります。このメソッドは今後のリリースで削除される予定です。 |
static final String SEGMENT_LIMIT
たとえば、これは特殊な例ですが、値が -1の場合、すべての入力ファイルを含む単一の巨大なセグメントが生成されます。一方、値が0の場合、クラスごとにセグメントが1つずつ生成されます。アーカイブ・セグメントのサイズが大きければ大きいほど断片化は起こりにくく、圧縮率も高くなります。しかし、こうしたセグメントを処理するためには、大量のメモリーが必要になります。
各セグメントのサイズは、セグメント内で転送される入力ファイルのサイズと、このファイルの名前のサイズ、およびその他の転送プロパティによって予測されます。
デフォルトは -1ですが、これは、パッカーが常に単一のセグメント出力ファイルを作成することを意味します。非常に大きな出力ファイルが生成される場合には、セグメント化を使用するか、入力ファイルをより小さなJARに分割することを強くお薦めします。
通常、この制限なしでパックされた10MバイトのJARは約10%余計に小さくなりますが、packerにはより多くのJavaヒープ(セグメント制限の約10倍)が必要になります。
static final String KEEP_FILE_ORDER
TRUE
に設定されると、packerはソース・アーカイブ内のすべての要素を元の順序で転送します。
これがFALSE
に設定されると、packerは要素を再度順序付けし、Javaアプリケーションに関する有用な情報を含まないJARディレクトリ・エントリも削除します。(通常は、これにより圧縮率が向上する)。
デフォルトはTRUE
です。これにより、入力情報は保存されますが、転送するアーカイブのサイズが必要以上に大きくなる場合があります。
static final String EFFORT
特殊な値0を指定すると、packerは元のJARファイルを圧縮せずに直接コピーします。JSR 200標準では、すべてのアンパック・ツールはこの特殊な処理をアーカイブ全体のパススルーとして理解する必要があります。
デフォルト値は5です。この場合、標準的な時間で、適度な圧縮が行われます。
static final String DEFLATE_HINT
TRUE
またはFALSE
に設定されると、packerは出力アーカイブ内でそれに応じたデフレーション・ヒントを設定し、アーカイブ要素の個別のデフレーション・ヒントを転送しません。
このプロパティが特殊な文字列KEEP
に設定されると、packerは入力アーカイブ内の利用可能な要素ごとに独立したデフレーション・ヒントを決定し、ヒントを別個に転送しようと試みます。
デフォルトはKEEP
です。これにより、入力情報は保存されますが、転送するアーカイブのサイズが必要以上に大きくなる場合があります。
展開するjarの要素を正しく圧縮するためにヒントを適切に処理することは、unpacker実装に依存します。
ZIPまたはJAR要素のデフレーション・ヒントは、要素が圧縮されたか、そのまま格納されたかを示します。
static final String MODIFICATION_TIME
LATEST
に設定されると、packerは、元のアーカイブ内の利用可能な全エントリ内で最新の修正時間、または各セグメント内の利用可能な全エントリの最新の修正時間の決定を試みます。この単一の値はセグメントの一部として転送され、各セグメントSEGMENT_LIMIT
の全エントリに適用されます。
これにより、インストールされたファイルすべてが単一の日付に設定される代わりに、転送するアーカイブのサイズをわずかに減少させることができます。
このプロパティを特殊な文字列KEEP
に設定すると、packerは入力要素ごとに別個の修正時間を転送します。
デフォルトはKEEP
です。これにより、入力情報は保存されますが、転送するアーカイブのサイズが必要以上に大きくなる場合があります。
出力ファイルの各要素の修正時間を正しく設定するために適切な処理を実行することは、unpacker実装に依存します。
SEGMENT_LIMIT
、定数フィールド値static final String PASS_FILE_PFX
システム・ファイル・セパレータがJARファイル・セパレータ「/」に置き換えられる点を除き、パス名の変換は行われません。
ファイル名は、JARファイル内の文字列と完全に一致していなければなりません。
プロパティ値がディレクトリ名の場合、そのディレクトリ内のすべてのファイルも渡されます。
例
Map p = packer.properties();
p.put(PASS_FILE_PFX+0, "mutants/Rogue.class");
p.put(PASS_FILE_PFX+1, "mutants/Wolverine.class");
p.put(PASS_FILE_PFX+2, "mutants/Storm.class");
# Pass all files in an entire directory hierarchy:
p.put(PASS_FILE_PFX+3, "police/");
static final String UNKNOWN_ATTRIBUTE
ERROR
、STRIP
、およびPASS
です。
文字列ERROR
は、タイプIOException
の例外で、パック操作が全体として失敗したことを意味します。文字列STRIP
は、属性が削除されることを意味します。文字列PASS
は、クラス・ファイル全体が(リソース・ファイルのように)圧縮なしで渡され、適切な警告が示されることを意味します。これが、このプロパティのデフォルト値です。
例
Map p = pack200.getProperties();
p.put(UNKNOWN_ATTRIBUTE, ERROR);
p.put(UNKNOWN_ATTRIBUTE, STRIP);
p.put(UNKNOWN_ATTRIBUTE, PASS);
static final String CLASS_ATTRIBUTE_PFX
たとえば、pack.class.attribute.SourceFile=RUH
には、このオプションの効果が組み込まれています。
特殊な文字列ERROR
、STRIP
、およびPASS
も、UNKNOWN_ATTRIBUTE
と同じ意味を持つものとして許可されています。ユーザーは、これを使用することで、特定の属性を(クラス圧縮なしで)ビット単位で拒否したり、取り除いたり、渡したりできます。
次のようなコードを使用して、JCOV用の属性をサポートできます。
Map p = packer.properties();
p.put(CODE_ATTRIBUTE_PFX+"CoverageTable", "NH[PHHII]");
p.put(CODE_ATTRIBUTE_PFX+"CharacterRangeTable", "NH[PHPOHIIH]");
p.put(CLASS_ATTRIBUTE_PFX+"SourceID", "RUH");
p.put(CLASS_ATTRIBUTE_PFX+"CompilationID", "RUH");
次のようなコードを使用して、デバッグ属性を取り除くことができます。
Map p = packer.properties();
p.put(CODE_ATTRIBUTE_PFX+"LineNumberTable", STRIP);
p.put(CODE_ATTRIBUTE_PFX+"LocalVariableTable", STRIP);
p.put(CLASS_ATTRIBUTE_PFX+"SourceFile", STRIP);
static final String FIELD_ATTRIBUTE_PFX
pack.field.attribute.Deprecated=
には、このオプションの効果が組み込まれています。特殊な文字列ERROR
、STRIP
、およびPASS
も使用できます。CLASS_ATTRIBUTE_PFX
、定数フィールド値static final String METHOD_ATTRIBUTE_PFX
pack.method.attribute.Exceptions=NH[RCH]
には、このオプションの効果が組み込まれています。特殊な文字列ERROR
、STRIP
、およびPASS
も使用できます。CLASS_ATTRIBUTE_PFX
、定数フィールド値static final String CODE_ATTRIBUTE_PFX
pack.code.attribute.LocalVariableTable=NH[PHOHRUHRSHH]
には、このオプションの効果が組み込まれています。特殊な文字列ERROR
、STRIP
、およびPASS
も使用できます。CLASS_ATTRIBUTE_PFX
、定数フィールド値static final String PROGRESS
unpackerは、最低限、パッキング操作の最初に進捗を0に、操作の最後に進捗を100に設定する必要があります。
static final String KEEP
static final String PASS
static final String STRIP
static final String ERROR
static final String TRUE
static final String FALSE
static final String LATEST
MODIFICATION_TIME
、定数フィールド値SortedMap<String,String> properties()
プロパティ・マップには、定義済みの実装固有のプロパティやデフォルトのプロパティを含められます。ユーザーは、既存のプロパティを変更する前に、情報を確認して意味を十分に理解することが推奨されています。
実装固有のプロパティには、com.で始まる、実装者に関連付けられたパッケージ名、または類似の接頭辞が付加されます。pack.およびunpack.で始まるすべてのプロパティ名は、このAPI用に予約されています。
不明なプロパティは、未指定のエラーとして無視または拒否できます。無効なエントリにより、詳細不明エラーがスローされる場合があります。
返されるマップは、オプションのSortedMap
をすべて実装します。
void pack(JarFile in, OutputStream out) throws IOException
入力を閉じますが、出力は閉じません(Pack200アーカイブは追加可能)。
in
- JarFileout
- OutputStreamIOException
- エラーが発生した場合。void pack(JarInputStream in, OutputStream out) throws IOException
入力を閉じますが、出力は閉じません(Pack200アーカイブは追加可能)。
JARマニフェスト・ファイルおよびそれを含むディレクトリで、修正時間およびデフレーション・ヒント属性を使用することはできません。
in
- JarInputStreamout
- OutputStreamIOException
- エラーが発生した場合。MODIFICATION_TIME
, DEFLATE_HINT
@Deprecated default void addPropertyChangeListener(PropertyChangeListener listener)
PropertyChangeListener
への依存は、Javaプラットフォームの将来のモジュール化に対する大きな障害になります。このメソッドは今後のリリースで削除される予定です。packerの進捗をモニターする必要があるアプリケーションは、代わりにPROGRESS
プロパティの値をポーリングすることができます。このメソッドのデフォルト実装は何もせず、副作用もありません。
警告: このメソッドは、java.beans
パッケージを含まないJava SEのすべてのサブセット・プロファイルのインタフェース宣言から省略されています。
listener
- プロパティの変更時に呼び出されるオブジェクト。properties()
, PROGRESS
@Deprecated default void removePropertyChangeListener(PropertyChangeListener listener)
PropertyChangeListener
への依存は、Javaプラットフォームの将来のモジュール化に対する大きな障害になります。このメソッドは今後のリリースで削除される予定です。addPropertyChangeListener(java.beans.PropertyChangeListener)
で追加された、PropertyChangeイベントのリスナーを削除します。
このメソッドのデフォルト実装は何もせず、副作用もありません。
警告: このメソッドは、java.beans
パッケージを含まないJava SEのすべてのサブセット・プロファイルのインタフェース宣言から省略されています。
listener
- 削除されるPropertyChangeリスナー。addPropertyChangeListener(java.beans.PropertyChangeListener)
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.