LHA Library for Java

jp.gr.java_conf.dangan.util.lha
クラス LhaOutputStream

java.lang.Object
  拡張java.io.OutputStream
      拡張jp.gr.java_conf.dangan.util.lha.LhaOutputStream

public class LhaOutputStream
extends OutputStream

接続されたストリームに 圧縮データを出力するためのユーティリティクラス。
java.util.zip.ZipOutputStream と似たインターフェイスを持つように作った。 Zipと違い、LHAの出力は本来 2パスであるため、1つのエントリを圧縮するまで、 エントリ全体のデータを持つ一時記憶領域が必要となる。 そのような記憶領域を使用したくない場合は LhaRetainedOutputStream か LhaImmediateOutputStream を使用する事。

 -- revision history --
 $Log: LhaOutputStream.java,v $
 Revision 1.1.2.2  2005/05/03 07:48:40  dangan
 [bug fix]
     圧縮法識別子 -lhd- を指定した時、圧縮後サイズがオリジナルサイズを下回らないため、
     必ず -lh0- に再設定されていた。そのためディレクトリ情報を格納できなかった。

 Revision 1.1.2.1  2005/04/29 02:14:28  dangan
 [bug fix]
     圧縮法識別子 -lhd- を指定した時、圧縮後サイズがオリジナルサイズを下回らないため、
     必ず -lh0- に再設定されていた。そのためディレクトリ情報を格納できなかった。

 Revision 1.1  2002/12/08 00:00:00  dangan
 [maintenance]
     LhaConstants から CompressMethod へのクラス名の変更に合わせて修正。

 Revision 1.0  2002/08/05 00:00:00  dangan
 add to version control
 [change]
     コンストラクタから 引数に String encode を取るものを廃止、
     Properties を引数に取るものを追加。
 [maintenance]
     ソース整備
     タブ廃止
     ライセンス文の修正

 

バージョン:
$Revision: 1.1.2.2 $
作成者:
$Author: dangan $

コンストラクタの概要
LhaOutputStream(OutputStream out)
          out に 圧縮データを出力するOutputStreamを構築する。
LhaOutputStream(OutputStream out, Properties property)
          out に 圧縮データを出力するOutputStreamを構築する。
LhaOutputStream(OutputStream out, RandomAccessFile file)
          out に 圧縮データを出力するOutputStreamを構築する。
LhaOutputStream(OutputStream out, RandomAccessFile file, Properties property)
          out に 圧縮データを出力するOutputStreamを構築する。
 
メソッドの概要
 void close()
          出力先に全てのデータを出力し、 ストリームを閉じる。
 void closeEntry()
          現在出力中のエントリを閉じ、次のエントリが出力可能な状態にする。
 void flush()
          flush は二つの動作を行う。
 void putNextEntry(LhaHeader header)
          新しいエントリを書き込むようにストリームを設定する。
 void putNextEntryAlreadyCompressed(LhaHeader header)
          既に圧縮済みのエントリを書きこむようにストリームを設定する。
 void putNextEntryNotYetCompressed(LhaHeader header)
          未だに圧縮されていないエントリを書きこむようにストリームを設定する。
 void write(byte[] buffer)
          現在のエントリに bufferの内容を全て書き出す。
 void write(byte[] buffer, int index, int length)
          現在のエントリに bufferの indexから lengthバイトのデータを書き出す。
 void write(int data)
          現在のエントリに1バイトのデータを書きこむ。
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

LhaOutputStream

public LhaOutputStream(OutputStream out)
out に 圧縮データを出力するOutputStreamを構築する。
一時退避機構はメモリを使用する。このため、 圧縮時データ量がメモリ量を超えるようなファイルは圧縮できない。
各圧縮形式に対応した符号器の生成式等を持つプロパティには LhaProperty.getProperties() で得られたプロパティが使用される。

パラメータ:
out - 圧縮データを出力するストリーム
関連項目:
LhaProperty.getProperties()

LhaOutputStream

public LhaOutputStream(OutputStream out,
                       Properties property)
out に 圧縮データを出力するOutputStreamを構築する。
一時退避機構はメモリを使用する。このため、 圧縮時データ量がメモリ量を超えるようなファイルは圧縮できない。

パラメータ:
out - 圧縮データを出力するストリーム
property - 各圧縮形式に対応した符号器の生成式等が含まれるプロパティ
関連項目:
LhaProperty

LhaOutputStream

public LhaOutputStream(OutputStream out,
                       RandomAccessFile file)
out に 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには LhaProperty.getProperties() で得られたプロパティが使用される。

パラメータ:
out - 圧縮データを出力するストリーム
file - RandomAccessFile のインスタンス。
の条件を満たすもの。
関連項目:
LhaProperty.getProperties()

LhaOutputStream

public LhaOutputStream(OutputStream out,
                       RandomAccessFile file,
                       Properties property)
out に 圧縮データを出力するOutputStreamを構築する。

パラメータ:
out - 圧縮データを出力するストリーム
file - RandomAccessFile のインスタンス。
の条件を満たすもの。
property - 各圧縮形式に対応した符号器の生成式等が含まれるプロパティ
例外:
UnsupportedEncodingException - encode がサポートされない場合
関連項目:
LhaProperty
メソッドの詳細

write

public void write(int data)
           throws IOException
現在のエントリに1バイトのデータを書きこむ。

パラメータ:
data - 書きこむデータ
例外:
IOException - 入出力エラーが発生した場合。

write

public void write(byte[] buffer)
           throws IOException
現在のエントリに bufferの内容を全て書き出す。

パラメータ:
buffer - 書き出すデータの入ったバイト配列
例外:
IOException - 入出力エラーが発生した場合。

write

public void write(byte[] buffer,
                  int index,
                  int length)
           throws IOException
現在のエントリに bufferの indexから lengthバイトのデータを書き出す。

パラメータ:
buffer - 書き出すデータの入ったバイト配列
index - buffer内の書き出すべきデータの開始位置
length - データのバイト数
例外:
IOException - 入出力エラーが発生した場合。

flush

public void flush()
           throws IOException
flush は二つの動作を行う。 一つは現在書き込み中のエントリのデータを 一時退避機構に送りこむように指示する。 これは PostLzssDecoder、LzssOutputStream の規約どおり flush() しなかった場合と 同じデータが出力される事を保証しない。 もう一つは 実際の出力先を flush() する。

例外:
IOException - 入出力エラーが発生した場合
関連項目:
PostLzssEncoder.flush(), LzssOutputStream.flush()

close

public void close()
           throws IOException
出力先に全てのデータを出力し、 ストリームを閉じる。

例外:
IOException - 入出力エラーが発生した場合

putNextEntry

public void putNextEntry(LhaHeader header)
                  throws IOException
新しいエントリを書き込むようにストリームを設定する。
このメソッドは 既に圧縮済みのエントリの場合は putNextEntryAlreadyCompressed(), 未だに圧縮されていない場合は putNextEntryNotYetCompressed() を呼び出す。
圧縮されているかの判定は、 のどれか一つでも LhaHeader.UNKNOWN であれば未だに圧縮されていないとする。

パラメータ:
header - 書きこむエントリについての情報を持つ LhaHeaderのインスタンス。
例外:
IOException - 入出力エラーが発生した場合

putNextEntryAlreadyCompressed

public void putNextEntryAlreadyCompressed(LhaHeader header)
                                   throws IOException
既に圧縮済みのエントリを書きこむようにストリームを設定する。
圧縮済みなので、一時退避機構を経ずに直接出力先に出力される。 圧縮済みデータが正しい事は、呼び出し側が保証する事。

パラメータ:
header - 書きこむエントリについての情報を持つ LhaHeaderのインスタンス。
例外:
IOException - 入出力エラーが発生した場合
IllegalArgumentException -
  1. header.getOriginalSize() が LhaHeader.UNKNOWN を返す場合
  2. header.getComressedSize() が LhaHeader.UNKNOWN を返す場合
  3. header.getCRC() が LhaHeader.UNKNOWN を返す場合
の何れか。

putNextEntryNotYetCompressed

public void putNextEntryNotYetCompressed(LhaHeader header)
                                  throws IOException
未だに圧縮されていないエントリを書きこむようにストリームを設定する。
header に OriginalSize, CompressedSize, CRCが指定されていても無視される。

パラメータ:
header - 書きこむエントリについての情報を持つ LhaHeaderのインスタンス。
例外:
IOException - 入出力エラーが発生した場合

closeEntry

public void closeEntry()
                throws IOException
現在出力中のエントリを閉じ、次のエントリが出力可能な状態にする。 圧縮に失敗した(圧縮後サイズが圧縮前サイズを上回った)場合、 解凍し無圧縮で格納する。エントリのサイズが大きい場合、 この処理にはかなりの時間がかかる。

例外:
IOException - 入出力エラーが発生した場合

LHA Library for Java

バグやドキュメントの誤りの報告は作者宛てにお願いします。
ドキュメント内に含まれる社名、製品名については一般に各社の商標または登録商標です。
Copyright © 2001-2002 Michel Ishizuka. All Rights Reserved.