JavaTM 2 Platform
Standard Ed. 5.0

java.util.jar
インタフェース Pack200.Packer

含まれているクラス:
Pack200

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 イベントのリスナーを削除します。
 

フィールドの詳細

SEGMENT_LIMIT

static final String SEGMENT_LIMIT
このプロパティは、各アーカイブ要素の推定ターゲットサイズ N (単位はバイト) を付与する数値です。単一の入力ファイルで N バイトを超えるバイト数が必要な場合、これに独自のアーカイブセグメントが付与されます。

特殊なケースとして、値 0 がクラスごとに 1 つのセグメントを生成するのに対し、値 -1 がすべての入力ファイルを含む単一の大規模なセグメントを生成します。アーカイブセグメントが大きくなるとフラグメンテーションが減少し、圧縮率が向上しますが、より多くのメモリが処理に必要になります。

各セグメントのサイズは、セグメント内で転送される各入力ファイルのサイズ、およびその名前と転送される他のプロパティのサイズを計算することで推測できます。

デフォルトは 1000000 (バイト) です。これにより、中程度のサイズの入力 JAR ファイルをあるセグメント内で転送することが可能になります。この値により、packer および unpacker のメモリ要件も制限されます。

通常、この制限なしでパックされた 10M バイト の JAR は約 10 % 余計に小さくなりますが、packer にはより多くの Java ヒープ (セグメント制限の約 10 倍) が必要になります。

関連項目:
定数フィールド値

KEEP_FILE_ORDER

static final String KEEP_FILE_ORDER
このプロパティが TRUE に設定されると、packer はソースアーカイブ内のすべての要素を元の順序で転送します。

これが FALSE に設定されると、packer は要素を再度順序付けし、Java アプリケーションに関する有用な情報を含まない JAR ディレクトリエントリを削除します (通常は、これにより圧縮率が向上する)。

デフォルトは TRUE です。これにより、入力情報は保存されますが、転送するアーカイブのサイズが必要以上に大きくなる場合があります。

関連項目:
定数フィールド値

EFFORT

static final String EFFORT
このプロパティが 1 桁の 10 進数に設定されると、packer は指定された量の労力をアーカイブの圧縮に費やします。レベル 1 は、サイズが幾分大きくなりますが、圧縮速度が高速になります。一方、レベル 9 は圧縮に時間がかかりますが、圧縮率が高くなります。

特殊な値 0 を指定すると、packer は元の JAR ファイルを圧縮せずに直接コピーします。JSR 200 標準では、unpacker がこの特殊なケースをアーカイブ全体のパススルーとして認識することが求められます。

デフォルトは 5 です。この設定では、中程度の時間を費やして適度な圧縮が行われます。

関連項目:
定数フィールド値

DEFLATE_HINT

static final String DEFLATE_HINT
このプロパティが TRUE または FALSE に設定されると、packer は出力アーカイブ内でそれに応じたデフレーションヒントを設定します。アーカイブ要素の個別のデフレーションヒントが転送されることはありません。

このプロパティが特殊な文字列 KEEP に設定されると、packer は入力アーカイブ内の利用可能な要素ごとに独立したデフレーションヒントを決定し、ヒントを別個に転送しようと試みます。

デフォルトは KEEP です。これにより、入力情報は保存されますが、転送するアーカイブのサイズが必要以上に大きくなる場合があります。

アンパックする jar の要素を正しく圧縮するためにヒントを適切に処理することは、unpacker 実装に依存します。

ZIP または JAR 要素のデフレーションヒントは、要素が圧縮されたか、そのまま格納されたかを示します。

関連項目:
定数フィールド値

MODIFICATION_TIME

static final String MODIFICATION_TIME
このプロパティが特殊な文字列 LATEST に設定されると、packer は、元のアーカイブ内の利用可能な全エントリ内で最新の修正時間、または各セグメント内の利用可能な全エントリの最新の修正時間の決定を試みます。この単一の値は、セグメントの一部として送信され、各セグメント SEGMENT_LIMIT 内のすべてのエントリに適用されます。

これにより、インストールされたファイルすべてが単一の日付に設定される代わりに、転送するアーカイブのサイズをわずかに減少させることができます。

このプロパティを特殊な文字列 KEEP に設定すると、packer は入力要素ごとに別個の修正時間を転送します。

デフォルトは KEEP です。これにより、入力情報は保存されますが、転送するアーカイブのサイズが必要以上に大きくなる場合があります。

出力ファイルの各要素の修正時間を正しく設定するために適切な処理を実行することは、unpacker 実装に依存します。

関連項目:
SEGMENT_LIMIT, 定数フィールド値

PASS_FILE_PFX

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/");
 

関連項目:
定数フィールド値

UNKNOWN_ATTRIBUTE

static final String UNKNOWN_ATTRIBUTE
不明な属性を含むクラスファイルに遭遇したときに実行するアクションを示します。利用可能な値は、文字列 ERRORSTRIP、および PASS です。

文字列 ERROR は、パック操作が全体として失敗し、適切な説明が示されることを意味します。文字列 STRIP は、属性が削除されることを意味します。文字列 PASS は、クラスファイル全体が (リソースファイルのように) 圧縮なしで渡され、適切な警告が示されることを意味します。これが、このプロパティのデフォルト値です。

例:


     Map p = pack200.getProperties();
     p.put(UNKNOWN_ATTRIBUTE, ERROR);
     p.put(UNKNOWN_ATTRIBUTE, STRIP);
     p.put(UNKNOWN_ATTRIBUTE, PASS);
 

関連項目:
定数フィールド値

CLASS_ATTRIBUTE_PFX

static final String CLASS_ATTRIBUTE_PFX
クラス属性名に連結された場合、JSR 200 仕様で指定されたレイアウト言語を使用して、その属性の形式を示します。

たとえば、pack.class.attribute.SourceFile=RUH には、このオプションの効果が組み込まれています。

特殊な文字列 ERRORSTRIP、および 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);
 

関連項目:
定数フィールド値

FIELD_ATTRIBUTE_PFX

static final String FIELD_ATTRIBUTE_PFX
フィールド属性名と連結して使用された場合、属性の形式を示します。たとえば、pack.field.attribute.Deprecated= には、このオプションの効果が組み込まれています。特殊な文字列 ERRORSTRIP、および PASS も使用できます。

関連項目:
CLASS_ATTRIBUTE_PFX, 定数フィールド値

METHOD_ATTRIBUTE_PFX

static final String METHOD_ATTRIBUTE_PFX
メソッド属性名と連結して使用された場合、属性の形式を示します。たとえば、pack.method.attribute.Exceptions=NH[RCH] には、このオプションの効果が組み込まれています。特殊な文字列 ERRORSTRIP、および PASS も使用できます。

関連項目:
CLASS_ATTRIBUTE_PFX, 定数フィールド値

CODE_ATTRIBUTE_PFX

static final String CODE_ATTRIBUTE_PFX
コード属性名と連結して使用された場合、属性の形式を示します。たとえば、pack.code.attribute.LocalVariableTable=NH[PHOHRUHRSHH] には、このオプションの効果が組み込まれています。特殊な文字列 ERRORSTRIP、および PASS も使用できます。

関連項目:
CLASS_ATTRIBUTE_PFX, 定数フィールド値

PROGRESS

static final String PROGRESS
unpacker の進捗状況をパーセントで示します。状況は、unpacker により周期的に更新されます。値 0 〜 100 は正常、-1 は停滞を示します。PropertyChangeListener とともにこのプロパティを監視するようにしてください。

unpacker は、最低限、パッキング操作の最初に進捗を 0 に、操作の最後に進捗を 100 に設定する必要があります。

関連項目:
addPropertyChangeListener(java.beans.PropertyChangeListener), 定数フィールド値

KEEP

static final String KEEP
文字列「keep」は、特定のプロパティで使用できます。

関連項目:
DEFLATE_HINT, MODIFICATION_TIME, 定数フィールド値

PASS

static final String PASS
文字列「pass」は、特定のプロパティで使用できます。

関連項目:
UNKNOWN_ATTRIBUTE, CLASS_ATTRIBUTE_PFX, FIELD_ATTRIBUTE_PFX, METHOD_ATTRIBUTE_PFX, CODE_ATTRIBUTE_PFX, 定数フィールド値

STRIP

static final String STRIP
文字列「strip」は、特定のプロパティで使用できます。

関連項目:
UNKNOWN_ATTRIBUTE, CLASS_ATTRIBUTE_PFX, FIELD_ATTRIBUTE_PFX, METHOD_ATTRIBUTE_PFX, CODE_ATTRIBUTE_PFX, 定数フィールド値

ERROR

static final String ERROR
文字列「error」は、特定のプロパティで使用できます。

関連項目:
UNKNOWN_ATTRIBUTE, CLASS_ATTRIBUTE_PFX, FIELD_ATTRIBUTE_PFX, METHOD_ATTRIBUTE_PFX, CODE_ATTRIBUTE_PFX, 定数フィールド値

TRUE

static final String TRUE
文字列「true」は、特定のプロパティで使用できます。

関連項目:
KEEP_FILE_ORDER, DEFLATE_HINT, 定数フィールド値

FALSE

static final String FALSE
文字列「false」は、特定のプロパティで使用できます。

関連項目:
KEEP_FILE_ORDER, DEFLATE_HINT, 定数フィールド値

LATEST

static final String LATEST
文字列「latest」は、特定のプロパティで使用できます。

関連項目:
MODIFICATION_TIME, 定数フィールド値
メソッドの詳細

properties

SortedMap<String,String> properties()
このエンジンのプロパティセットを取得します。このセットは「ライブビュー」であるため、内容を変更するとただちに Packer エンジンがその影響を受けます。また、エンジンから行われた変更 (進捗の表示など) は、ただちにマップで確認できます。

プロパティマップには、定義済みの実装固有のプロパティやデフォルトのプロパティを含められます。ユーザは、既存のプロパティを変更する前に、情報を確認して意味を十分に理解することが勧められています。

実装固有のプロパティには、com. で始まる、実装者に関連付けられたパッケージ名、または類似の接頭辞が付加されます。pack. および unpack. で始まるすべてのプロパティ名は、この API 用に予約されています。

不明なプロパティは、未指定のエラーとして無視または拒否できます。無効なエントリにより、詳細不明エラーがスローされる場合があります。

返されるマップは、オプションの SortedMap をすべて実装します。

戻り値:
プロパティキー文字列とプロパティ値の、ソートされた関連付け

pack

void pack(JarFile in,
          OutputStream out)
          throws IOException
JarFile を取得して、Pack200 アーカイブに変換します。

入力を閉じますが、出力は閉じません (Pack200 アーカイブは追加可能)。

パラメータ:
in - JarFile
out - OutputStream
例外:
IOException - エラーが発生した場合

pack

void pack(JarInputStream in,
          OutputStream out)
          throws IOException
JarInputStream を取得して、Pack200 アーカイブに変換します。

入力を閉じますが、出力は閉じません (Pack200 アーカイブは追加可能)。

JAR マニフェストファイルおよびそれを含むディレクトリで、修正時間およびデフレーションヒント属性を使用することはできません。

パラメータ:
in - JarInputStream
out - OutputStream
例外:
IOException - エラーが発生した場合
関連項目:
MODIFICATION_TIME, DEFLATE_HINT

addPropertyChangeListener

void addPropertyChangeListener(PropertyChangeListener listener)
PropertyChange イベントのリスナーをプロパティマップに登録します。通常、これは、アプリケーションにより進捗バーの更新に使用されます。

パラメータ:
listener - プロパティの変更時に呼び出されるオブジェクト
関連項目:
properties(), PROGRESS

removePropertyChangeListener

void removePropertyChangeListener(PropertyChangeListener listener)
addPropertyChangeListener(java.beans.PropertyChangeListener) により追加された、PropertyChange イベントのリスナーを削除します。

パラメータ:
listener - 削除される PropertyChange リスナー
関連項目:
addPropertyChangeListener(java.beans.PropertyChangeListener)

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。