| LHA Library for Java | |
| Prev Class | Next Class | Frames | No Frames |
| Summary: Nested | Field | Method | Constr | Detail: Nested | Field | Method | Constr |
java.lang.Objectjp.gr.java_conf.dangan.util.lha.LhaHeader
-- revision history --
$Log: LhaHeader.java,v $
Revision 1.2.2.3 2005/05/03 07:50:30 dangan
[bug fix]
exportLevel1Header() で skip size のチェックがされていなかった。
Revision 1.2.2.2 2005/02/02 00:57:46 dangan
[bug fix]
importLevelXHeader(byte[], String) でファイルサイズを int で読み込んでいたため
31ビット値以上のサイズのファイルを正しく扱えていなかったのを修正。
Revision 1.2.2.1 2003/07/20 13:19:21 dangan
[bug fix]
exportDirNameExtHeader(String) で System.arraycopy の src と dest の配置が間違っていた。
Revision 1.2 2002/12/08 00:00:00 dangan
[maintenance]
LhaConstants から CompressMethod へのクラス名の変更に合わせて修正。
Revision 1.1 2002/12/05 00:00:00 dangan
[improvement]
64ビットファイルサイズヘッダに対応。
[change]
LhaUtil.DefaultEncoding から LhaProperty.encoding を使用するように変更。
getNextHeaderData() を getFirstHeaderData() に名前変更。
新しい getNextHeaderData() は呼び出された位置で
ヘッダを発見できない場合 null を返す。
LhaHeader を拡張したサブクラスを使用する人のための createInstance() を追加。
Revision 1.0 2002/08/05 00:00:00 dangan
add to version control
[bug fix]
setDate( null ) を許していた。
setCompressMethod( null ) を許していた。
exportLevel2,3Header で
Date が 32bit の time_t の範囲外の値(負の値を含む)の場合を許していた。
[change]
exportHeader で ヘッダレベルが 0,1,2,3 のいずれでもない場合
IllegalStateException を投げるように変更。
[maintenance]
ソース整備
タブ廃止
ライセンス文の修正
Field Summary | |
static int |
|
static int |
|
Constructor Summary | |
| |
| |
| |
| |
Method Summary | |
static boolean |
|
Object |
|
static LhaHeader |
|
protected byte[][] |
|
byte[] |
|
byte[] |
|
int |
|
String |
|
long |
|
protected byte[] |
|
static byte[] |
|
int |
|
Date |
|
protected byte |
|
static byte[] |
|
byte |
|
long |
|
String |
|
protected void |
|
void |
|
void |
|
void |
|
protected void |
|
void |
|
void |
|
protected void |
|
void |
|
void |
|
void |
|
public static final int NO_CRC
CRC値が無い事を意味する値。 レベル0ヘッダでCRC値が存在しない事を意味する。
- Field Value:
- -2
public static final int UNKNOWN
不明を意味する値。 LhaHeader.getCRC(), LhaHeader.getCompressedSize(), LhaHeader.getOriginalSzie() がこの値を返した場合は 処理前のために、その値が不明である事を示す。
- Field Value:
- -1
public LhaHeader(String path)
path という名前を持つ LhaHeader のインスタンスを生成する。
パスデリミタには File.separator を使用すること。
path が パスデリミタでターミネートされている場合は ディレクトリであると解釈される。
- Parameters:
path- パス名
public LhaHeader(String path,
Date date)path という名前を持ち、最終更新日時が date の LhaHeader のインスタンスを生成する。
パスデリミタには File.separator を使用すること。
path が パスデリミタでターミネートされている場合は ディレクトリであると解釈される。
- Parameters:
path- パス名date- 最終更新日時
public LhaHeader(byte[] HeaderData)
ヘッダデータから 新しい LhaHeader の インスタンスを生成する。
エンコードは LhaUtil.DefaultEncode が使用される。
- Parameters:
HeaderData- ヘッダデータ
public LhaHeader(byte[] HeaderData,
String encode)
throws UnsupportedEncodingExceptionヘッダデータから 新しい LhaHeader の インスタンスを生成する。
- Parameters:
HeaderData- ヘッダデータencode- 文字列情報を解釈する際に使用する エンコード
public static boolean checkHeaderData(byte[] HeaderData)
ヘッダデータが正当であるかをチェックする。
- Parameters:
HeaderData- ヘッダデータをバイト配列に格納したもの
- Returns:
- ヘッダデータが正当であれば true 違えば false
public Object clone()
このオブジェクトのコピーを作成して返す。
- Returns:
- このオブジェクトのコピー
public static LhaHeader createInstance(byte[] HeaderData, Properties property)
property の キー"lha.header" に結び付けられた生成式を使用して HeaderData から LhaHeader のインスタンスを生成する。
- Parameters:
HeaderData- ヘッダのデータを持つバイト配列property- LhaProperty.parse() で LhaHeader のインスタンスが生成できるような 生成式を キー"lha.header" の値として持つプロパティ
- Returns:
- LhaHeader のインスタンス
protected byte[][] exportExtendHeaders(String encode)
throws UnsupportedEncodingException拡張ヘッダをバイト配列の形にして出力する。 このメソッドをオーバーライドする事によって 様々な拡張ヘッダに対応することが可能となる。 LhaHeader では private メンバである ExtraExtHeaders に登録された拡張ヘッダの情報を 返すだけである。 出力の形式は 第一バイト目に拡張ヘッダ識別子 続いて、拡張ヘッダデータが格納され、 次の拡張ヘッダの大きさは添付されない。
- Parameters:
encode- 文字列情報を出力する際に使用する エンコード
- Returns:
- 1つの拡張ヘッダを1つのバイト配列に格納し、 それを配列の形にしたもの
public byte[] getBytes()
このLhaHeaderのデータを使用して ヘッダデータを生成し、 それをバイト配列の形で得る。
エンコードはデフォルトのものが使用される。
- Returns:
- バイト配列に格納したヘッダデータ
public byte[] getBytes(String encode)
throws UnsupportedEncodingExceptionこのLhaHeaderのデータを使用して ヘッダデータを生成し、 それをバイト配列の形で得る。
- Parameters:
encode- 文字列情報を出力する際に使用する エンコード
- Returns:
- バイト配列に格納したヘッダデータ
public int getCRC()
データのCRC16値を得る。
- Returns:
- データのCRC16値
LhaHeader( String path ) または LhaHeader( String path, Date date )で生成された インスタンスは初期状態ではCRCが不明のため LhaHeader.UNKNOWN( -1 ) を返す。
レベル0ヘッダでCRC16値の フィールドが無い場合は LhaHeader.NO_CRC( -2 )を返す
public String getCompressMethod()
データを圧縮した方法を識別する文字列を得る。
- Returns:
- 圧縮法文字列
public long getCompressedSize()
データの圧縮後のサイズを得る。
- Returns:
- 圧縮後のサイズ
LhaHeader( String path ) または LhaHeader( String path, Date date )で生成された インスタンスは初期状態ではサイズが不明のため LhaHeader.UNKNOWN( -1 ) を返す。
- See Also:
UNKNOWN
protected byte[] getExtraData()
レベル 0 ヘッダ、 レベル 1 ヘッダの時に 付加される可能性がある基本ヘッダ内の拡張データを得る。
- Returns:
- 拡張データ
public static byte[] getFirstHeaderData(InputStream in)
throws IOException入力ストリームから 最初のヘッダを読み込む。
このメソッドはレベル1ヘッダ、もしくは レベル3ヘッダに 似たデータが存在すると、ヘッダ全てを読み込もうとして in.mark( 65536 ) の 限界を超えて 読み込む可能性があり、 その結果 reset() できずに その間のデータを読み落とす 可能性がある。
また、InputStream のmark/reset の実装次第では ストリーム終端付近で ヘッダに似たデータが存在すると ヘッダを全て読み込もうとして EndOfStreamに達してしまい、 reset()できずに その間のデータを読み落とす可能性がある。
- Parameters:
in- ヘッダデータを読み込む入力ストリーム ストリームは mark/resetのサポートを必要とする。
- Returns:
- 読み取られたヘッダデータ
ヘッダが見つからずに EndOfStream に達した場合は null
public int getHeaderLevel()
このヘッダのヘッダレベルを得る。
- Returns:
- ヘッダレベル
public Date getLastModified()
データの最終更新日時を得る。
- Returns:
- データの最終更新日時
protected byte getLevel0DosAttribute()
レベル 0 ヘッダに記される DOS のファイル属性を得る。
- Returns:
- DOS の ファイル属性
public static byte[] getNextHeaderData(InputStream in)
throws IOException入力ストリームから 次のヘッダを読み込む。
このメソッドはレベル1ヘッダ、もしくは レベル3ヘッダに 似たデータが存在すると、ヘッダ全てを読み込もうとして in.mark( 65536 ) の 限界を超えて 読み込む可能性があり、 その結果 reset() できずに その間のデータを読み落とす 可能性がある。
また、ストリーム終端付近で ヘッダに似たデータが存在する と ヘッダを全て読み込もうとして EndOfStreamに達してしまい、 reset()できずに その間のデータを読み落とす可能性がある。
- Parameters:
in- ヘッダデータを読み込む入力ストリーム ストリームは mark/resetのサポートを必要とする。
- Returns:
- 読み取られたヘッダデータ
ヘッダが見つからずに EndOfStream に達した場合は null
public byte getOSID()
このヘッダを作成した OS の識別子を得る。
- Returns:
- OSの識別子
public long getOriginalSize()
データの圧縮前のサイズを得る。
- Returns:
- 圧縮前のサイズ
LhaHeader( String path ) または LhaHeader( String path, Date date )で生成された インスタンスは初期状態ではサイズが不明のため LhaHeader.UNKNOWN( -1 ) を返す。
- See Also:
UNKNOWN
public String getPath()
データの名前、 もしくはデータがファイルであった場合のパス名を得る。
パス名とはいっても、Windows 系の A: のような ドライブ名を含んではならない。
パスデリミタには File.separator を使用する。
- Returns:
- データの名前、もしくは パス名。
- See Also:
File.separator
protected void importExtendHeader(byte[] HeaderData,
int index,
int length,
String encode)
throws UnsupportedEncodingException拡張ヘッダを読み込む。 このメソッドをオーバーライドする事によって 様々な拡張ヘッダに対応することが可能となる。 LhaHeader では 拡張ヘッダを private メンバである ExtraExtHeaders に登録するだけである。
- Parameters:
HeaderData- ヘッダデータindex- HeaderData内の拡張ヘッダの開始位置length- 拡張ヘッダの長さencode- 文字列情報を解釈する際に使用する エンコード
public void setCRC(int crc)
圧縮前のデータの CRC16値を設定する。
LhaHeader.UNKNOWN( -1 ) は サイズ不明を示す 特別な数字であるため設定できない。
LhaHeader.NO_CRC( -2 ) は レベル0ヘッダの場 合に CRC値を出力しないことを意味する特別な値 である。
他のヘッダレベルの時に LhaHeader.NO_CRC( -2 ) を設定しても例外を投げないが getBytes() 時に 例外を投げるので注意すること。
有効なのは下位2バイトで、上位2バイトは無視される。
- Parameters:
crc- データの圧縮前のCRC16値
public void setCompressMethod(String method)
圧縮法文字列を設定する。
- Parameters:
method- 圧縮法文字列
public void setCompressedSize(long size)
圧縮後データサイズを設定する。
LhaHeader.UNKNOWN( -1 ) は サイズ不明を示す 特別な数字であるため設定できない。
また レベル0,1,3 では処理できるのは 4バイト値のみであるため 4バイトで表現できない値を設定した場合 getByte() 時に例外を投げる。
- Parameters:
size- 圧縮後データサイズ
- See Also:
UNKNOWN
protected void setExtraData(byte[] data)
レベル 0,1ヘッダ時に使用される 基本ヘッダ内 拡張情報を設定する。
拡張情報のバイト数には§限が存在するが、このメソッドは §限を越えても例外を投げないことに注意。§限を越えた場合 getBytes()時に例外を投げる。
- Parameters:
data- 拡張情報 拡張情報を出力しない場合は nullを設定する。
public void setHeaderLevel(int level)
ヘッダレベルを設定する。
現在設定できるのは 0,1,2,3 のみとなっている。
ヘッダレベルの変更はパスの最大長や、LastModified の§限範囲 などを変化させるため注意が必要である。
- Parameters:
level- ヘッダレベル
public void setLastModified(Date date)
圧縮データの最終更新日時を設定する。
ヘッダレベルが 0,1 の場合は MsdosDateで表せる範囲内、 ヘッダレベルが 2,3 の場合は 4byte の time_tで表せる範囲内 の日付で無ければならない。
範囲内でなくても このメソッドは例外を投げないことに注意す ること。範囲内に無い場合は このメソッドは例外を投げないが、 getBytes() 時に例外を投げる。
- Parameters:
date- 最終更新日時
protected void setLevel0DosAttribute(byte attribute)
レベル 0ヘッダの場合に出力される、 MS-DOS のファイル属性を設定する。
- Parameters:
attribute- MS-DOSのファイル属性
public void setOSID(byte id)
このヘッダにOS固有の情報が含まれる場合、 そのデータを解釈する手がかりとして OSの識別子を設定する。
- Parameters:
id- OS識別子
public void setOriginalSize(long size)
圧縮前データサイズを設定する。
LhaHeader.UNKNOWN( -1 ) は サイズ不明を示す 特別な数字であるため設定できない。
また レベル0,1,3 では処理できるのは 4バイト値のみであるため 4バイトで表現できない値を設定した場合 getByte() 時に例外を投げる。
- Parameters:
size- 圧縮前データサイズ
- See Also:
UNKNOWN
public void setPath(String path)
データの名前、もしくはデータがファイルである場合、 データのパスを設定する。
パスデリミタには File.separator を使用する。
ヘッダレベルによって path にはバイト数の§限が存在するが、 このメソッドは§限を越えた場合でも 例外を投げないことに 注意。§限を越えた場合は このメソッドは例外を投げないが、 getBytes()時に例外を投げる
- Parameters:
path- データの名前、もしくはファイル名
- See Also:
File.separator