JavaTM Platform
Standard Ed. 6

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」に設定することが必要な場合もあります。  

(このように行える理由:パックプログラムが実行するクラスファイル構造の再配置はべき等であるため、2 回目のパックでは、最初のパックで生成された順序が変更されない。またアンパックプログラムでは、どのようなアーカイブ要素の伝送順序に対しても特定のバイトイメージを生成することが、JSR 200 仕様で保証されている)  

下位互換性を維持するため、入力の JAR ファイルが 1.5 (またはそれ以下) のクラスファイルだけで構成される場合は、1.5 互換のパックファイルが生成されます。そうでない場合は、1.6 互換の pack200 ファイルが生成されます。  

導入されたバージョン:
1.5

フィールドの概要
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 ファイルを 1 つのセグメントに送信できるサイズです。また、このサイズによって、圧縮プログラムと解凍プログラムのメモリー要件が制限されます。  

通常、この制限なしでパックされた 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 標準では、すべての解凍プログラムが、この特別な場合をアーカイブ全体のパススルーと解釈するように規定しています。  

デフォルトは 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 は、タイプ IOException の例外で、パック操作が全体として失敗したことを意味します。文字列 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 Platform
Standard Ed. 6

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

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