jp.gr.java_conf.dangan.util.lha

Class 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]
     ソース整備
     タブ廃止
     ライセンス文の修正

 
Version:
$Revision: 1.1.2.2 $
Author:
$Author: dangan $

Constructor Summary

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

Method Summary

void
close()
出力先に全てのデータを出力し、 ストリームを閉じる。
void
closeEntry()
現在出力中のエントリを閉じ、次のエントリが出力可能な状態にする。 圧縮に失敗した(圧縮後サイズが圧縮前サイズを上回った)場合、 解凍し無圧縮で格納する。エントリのサイズが大きい場合、 この処理にはかなりの時間がかかる。
void
flush()
flush は二つの動作を行う。 一つは現在書き込み中のエントリのデータを 一時退避機構に送りこむように指示する。 これは PostLzssDecoder、LzssOutputStream の規約どおり flush() しなかった場合と 同じデータが出力される事を保証しない。 もう一つは 実際の出力先を flush() する。
void
putNextEntry(LhaHeader header)
新しいエントリを書き込むようにストリームを設定する。
このメソッドは 既に圧縮済みのエントリの場合は putNextEntryAlreadyCompressed(), 未だに圧縮されていない場合は putNextEntryNotYetCompressed() を呼び出す。
圧縮されているかの判定は、
  • header.getCompressedSize()
  • header.getOriginalSize()
  • header.getCRC()
のどれか一つでも LhaHeader.UNKNOWN であれば未だに圧縮されていないとする。
void
putNextEntryAlreadyCompressed(LhaHeader header)
既に圧縮済みのエントリを書きこむようにストリームを設定する。
圧縮済みなので、一時退避機構を経ずに直接出力先に出力される。 圧縮済みデータが正しい事は、呼び出し側が保証する事。
void
putNextEntryNotYetCompressed(LhaHeader header)
未だに圧縮されていないエントリを書きこむようにストリームを設定する。
header に OriginalSize, CompressedSize, CRCが指定されていても無視される。
void
write(byte[] buffer)
現在のエントリに bufferの内容を全て書き出す。
void
write(byte[] buffer, int index, int length)
現在のエントリに bufferの indexから lengthバイトのデータを書き出す。
void
write(int data)
現在のエントリに1バイトのデータを書きこむ。

Constructor Details

LhaOutputStream

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

LhaOutputStream

public LhaOutputStream(OutputStream out,
                       Properties property)
out に 圧縮データを出力するOutputStreamを構築する。
一時退避機構はメモリを使用する。このため、 圧縮時データ量がメモリ量を超えるようなファイルは圧縮できない。
Parameters:
out - 圧縮データを出力するストリーム
property - 各圧縮形式に対応した符号器の生成式等が含まれるプロパティ

LhaOutputStream

public LhaOutputStream(OutputStream out,
                       RandomAccessFile file)
out に 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには LhaProperty.getProperties() で得られたプロパティが使用される。
Parameters:
out - 圧縮データを出力するストリーム
file - RandomAccessFile のインスタンス。
  • 既に close() されていない事。
  • コンストラクタの mode には "rw" オプションを使用して、 読みこみと書きこみが出来るように生成されたインスタンスであること。
の条件を満たすもの。

LhaOutputStream

public LhaOutputStream(OutputStream out,
                       RandomAccessFile file,
                       Properties property)
out に 圧縮データを出力するOutputStreamを構築する。
Parameters:
out - 圧縮データを出力するストリーム
file - RandomAccessFile のインスタンス。
  • 既に close() されていない事。
  • コンストラクタの mode には "rw" オプションを使用して、 読みこみと書きこみが出来るように生成されたインスタンスであること。
の条件を満たすもの。
property - 各圧縮形式に対応した符号器の生成式等が含まれるプロパティ

Method Details

close

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

closeEntry

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

flush

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

putNextEntry

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

putNextEntryAlreadyCompressed

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

putNextEntryNotYetCompressed

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

write

public void write(byte[] buffer)
            throws IOException
現在のエントリに bufferの内容を全て書き出す。
Parameters:
buffer - 書き出すデータの入ったバイト配列

write

public void write(byte[] buffer,
                  int index,
                  int length)
            throws IOException
現在のエントリに bufferの indexから lengthバイトのデータを書き出す。
Parameters:
buffer - 書き出すデータの入ったバイト配列
index - buffer内の書き出すべきデータの開始位置
length - データのバイト数

write

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

When you found typographical errors or omissions, Please mail to cqw10305@nifty.com
The company name and product name which are used in this document, it is the trademark or registered trademark of each company generally.
Copyright © 2001-2002 Michel Ishizuka. All Rights Reserved.