|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
public static interface Pack200.Packer
packer エンジンは、さまざまな変換を入力 JAR ファイルに適用して、パックストリームを gzip や zip などのコンプレッサを使用して大幅に圧縮可能にします。エンジンのインスタンスは、Pack200.newPacker()
を使用して取得できます。
高度な圧縮は、JSR 200 仕様で説明されている多数のテクニックを使用して実現されます。これらの技術には、定数プールのソート、再順序付け、および同位置への配置が含まれます。
pack エンジンは、初期化されると、次に示すプロパティで規定された初期状態になります。初期状態を操作するには、(properties()
を使用して) エンジンプロパティを取得してから、修正したプロパティをマップに格納します。リソースファイルは、一切変更なしで渡されます。unpacker は、定数プール順などの一般的ではないクラスファイル機能に自由に変更できるため、クラスファイルには同一のバイトは含まれません。ただし、「Java 仮想マシン仕様」(http://java.sun.com/docs/books/vmspec/html/ClassFile.doc.html) で指定されているように、これらのクラスファイルは意味的に同一です。
デフォルトでは、packer が JAR 要素の順序を変更することはありません。また、各 JAR 要素の修正時間およびデフレーションヒントは、変更を加えられずに渡されます (Unix ファイルのアクセス権を付与する追加属性などの、他の ZIP アーカイブ情報は失われる)。
一般に、JAR のパックおよびアンパックにより、JAR のクラスファイル内にあるバイト単位のコンテンツが変更されます。これは、通常、パックおよびアンパックにより、JAR 要素のバイト単位イメージに依存するデジタル署名がすべて無効になることを意味します。JAR の署名とパックの両方を実行するためには、最初に JAR のパックとアンパックを実行して「正規化」してから、アンパックされた JAR 要素上の署名を計算し、最後に署名済みの JAR を再パックする必要があります。両方のパック手順で正確に同じオプションを使用してください。また、クラスファイルのサイズは微妙に変化するため、セグメント境界を意図せずに変更してしまうことを避けるために、セグメント制限を「-1」に設定することが必要な場合もあります。
(これが機能する理由は次の通り。クラスファイル構造に対して packer が実行する再順序付けはすべてべき等であるため、2 番目のパックで、最初のパッキングにより生成された順序が変更されることはない。また、JSR 200 仕様により、unpacker は、アーカイブ要素の特定の転送順序に対して指定されたバイト単位イメージを生成することが保証されている。)
フィールドの概要 | |
---|---|
static String |
CLASS_ATTRIBUTE_PFX
クラス属性名に連結された場合、JSR 200 仕様で指定されたレイアウト言語を使用して、その属性の形式を示します。 |
static String |
CODE_ATTRIBUTE_PFX
コード属性名と連結して使用された場合、属性の形式を示します。 |
static String |
DEFLATE_HINT
このプロパティが TRUE または FALSE に設定されると、packer は出力アーカイブ内でそれに応じたデフレーションヒントを設定します。 |
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 の進捗状況をパーセントで示します。 |
static String |
SEGMENT_LIMIT
このプロパティは、各アーカイブ要素の推定ターゲットサイズ N (単位はバイト) を付与する数値です。 |
static String |
STRIP
文字列「strip」は、特定のプロパティで使用できます。 |
static String |
TRUE
文字列「true」は、特定のプロパティで使用できます。 |
static String |
UNKNOWN_ATTRIBUTE
不明な属性を含むクラスファイルに遭遇したときに実行するアクションを示します。 |
メソッドの概要 | |
---|---|
void |
addPropertyChangeListener(PropertyChangeListener listener)
PropertyChange イベントのリスナーをプロパティマップに登録します。 |
void |
pack(JarFile in,
OutputStream out)
JarFile を取得して、Pack200 アーカイブに変換します。 |
void |
pack(JarInputStream in,
OutputStream out)
JarInputStream を取得して、Pack200 アーカイブに変換します。 |
SortedMap<String,String> |
properties()
このエンジンのプロパティセットを取得します。 |
void |
removePropertyChangeListener(PropertyChangeListener listener)
addPropertyChangeListener(java.beans.PropertyChangeListener) により追加された、PropertyChange イベントのリスナーを削除します。 |
フィールドの詳細 |
---|
static final String SEGMENT_LIMIT
特殊なケースとして、値 0 がクラスごとに 1 つのセグメントを生成するのに対し、値 -1 がすべての入力ファイルを含む単一の大規模なセグメントを生成します。アーカイブセグメントが大きくなるとフラグメンテーションが減少し、圧縮率が向上しますが、より多くのメモリが処理に必要になります。
各セグメントのサイズは、セグメント内で転送される各入力ファイルのサイズ、およびその名前と転送される他のプロパティのサイズを計算することで推測できます。
デフォルトは 1000000 (バイト) です。これにより、中程度のサイズの入力 JAR ファイルをあるセグメント内で転送することが可能になります。この値により、packer および unpacker のメモリ要件も制限されます。
通常、この制限なしでパックされた 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 標準では、unpacker がこの特殊なケースをアーカイブ全体のパススルーとして認識することが求められます。
デフォルトは 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
は、パック操作が全体として失敗し、適切な説明が示されることを意味します。文字列 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
PropertyChangeListener
とともにこのプロパティを監視するようにしてください。
unpacker は、最低限、パッキング操作の最初に進捗を 0 に、操作の最後に進捗を 100 に設定する必要があります。
addPropertyChangeListener(java.beans.PropertyChangeListener)
,
定数フィールド値static final String KEEP
DEFLATE_HINT
,
MODIFICATION_TIME
,
定数フィールド値static final String PASS
UNKNOWN_ATTRIBUTE
,
CLASS_ATTRIBUTE_PFX
,
FIELD_ATTRIBUTE_PFX
,
METHOD_ATTRIBUTE_PFX
,
CODE_ATTRIBUTE_PFX
,
定数フィールド値static final String STRIP
UNKNOWN_ATTRIBUTE
,
CLASS_ATTRIBUTE_PFX
,
FIELD_ATTRIBUTE_PFX
,
METHOD_ATTRIBUTE_PFX
,
CODE_ATTRIBUTE_PFX
,
定数フィールド値static final String ERROR
UNKNOWN_ATTRIBUTE
,
CLASS_ATTRIBUTE_PFX
,
FIELD_ATTRIBUTE_PFX
,
METHOD_ATTRIBUTE_PFX
,
CODE_ATTRIBUTE_PFX
,
定数フィールド値static final String TRUE
KEEP_FILE_ORDER
,
DEFLATE_HINT
,
定数フィールド値static final String FALSE
KEEP_FILE_ORDER
,
DEFLATE_HINT
,
定数フィールド値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
- OutputStream
IOException
- エラーが発生した場合void pack(JarInputStream in, OutputStream out) throws IOException
入力を閉じますが、出力は閉じません (Pack200 アーカイブは追加可能)。
JAR マニフェストファイルおよびそれを含むディレクトリで、修正時間およびデフレーションヒント属性を使用することはできません。
in
- JarInputStreamout
- OutputStream
IOException
- エラーが発生した場合MODIFICATION_TIME
,
DEFLATE_HINT
void addPropertyChangeListener(PropertyChangeListener listener)
listener
- プロパティの変更時に呼び出されるオブジェクトproperties()
,
PROGRESS
void removePropertyChangeListener(PropertyChangeListener listener)
addPropertyChangeListener(java.beans.PropertyChangeListener)
により追加された、PropertyChange イベントのリスナーを削除します。
listener
- 削除される PropertyChange リスナーaddPropertyChangeListener(java.beans.PropertyChangeListener)
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。