LHA Library for Java

jp.gr.java_conf.dangan.util.lha
Class LhaOutputStream

java.lang.Object
  extended by java.io.OutputStream
      extended by jp.gr.java_conf.dangan.util.lha.LhaOutputStream
All Implemented Interfaces:
java.io.Closeable, java.io.Flushable

public class LhaOutputStream
extends java.io.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(java.io.OutputStream out)
          out に 圧縮データを出力するOutputStreamを構築する。
一時退避機構はメモリを使用する。このため、 圧縮時データ量がメモリ量を超えるようなファイルは圧縮できない。
各圧縮形式に対応した符号器の生成式等を持つプロパティには LhaProperty.getProperties() で得られたプロパティが使用される。
LhaOutputStream(java.io.OutputStream out, java.util.Properties property)
          out に 圧縮データを出力するOutputStreamを構築する。
一時退避機構はメモリを使用する。このため、 圧縮時データ量がメモリ量を超えるようなファイルは圧縮できない。
LhaOutputStream(java.io.OutputStream out, java.io.RandomAccessFile file)
          out に 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには LhaProperty.getProperties() で得られたプロパティが使用される。
LhaOutputStream(java.io.OutputStream out, java.io.RandomAccessFile file, java.util.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バイトのデータを書きこむ。
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LhaOutputStream

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

Parameters:
out - 圧縮データを出力するストリーム
See Also:
LhaProperty.getProperties()

LhaOutputStream

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

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

LhaOutputStream

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

Parameters:
out - 圧縮データを出力するストリーム
file - RandomAccessFile のインスタンス。
  • 既に close() されていない事。
  • コンストラクタの mode には "rw" オプションを使用して、 読みこみと書きこみが出来るように生成されたインスタンスであること。
の条件を満たすもの。
See Also:
LhaProperty.getProperties()

LhaOutputStream

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

Parameters:
out - 圧縮データを出力するストリーム
file - RandomAccessFile のインスタンス。
  • 既に close() されていない事。
  • コンストラクタの mode には "rw" オプションを使用して、 読みこみと書きこみが出来るように生成されたインスタンスであること。
の条件を満たすもの。
property - 各圧縮形式に対応した符号器の生成式等が含まれるプロパティ
Throws:
java.io.UnsupportedEncodingException - encode がサポートされない場合
See Also:
LhaProperty
Method Detail

write

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

Specified by:
write in class java.io.OutputStream
Parameters:
data - 書きこむデータ
Throws:
java.io.IOException - 入出力エラーが発生した場合。

write

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

Overrides:
write in class java.io.OutputStream
Parameters:
buffer - 書き出すデータの入ったバイト配列
Throws:
java.io.IOException - 入出力エラーが発生した場合。

write

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

Overrides:
write in class java.io.OutputStream
Parameters:
buffer - 書き出すデータの入ったバイト配列
index - buffer内の書き出すべきデータの開始位置
length - データのバイト数
Throws:
java.io.IOException - 入出力エラーが発生した場合。

flush

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

Specified by:
flush in interface java.io.Flushable
Overrides:
flush in class java.io.OutputStream
Throws:
java.io.IOException - 入出力エラーが発生した場合
See Also:
PostLzssEncoder.flush(), LzssOutputStream.flush()

close

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

Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.OutputStream
Throws:
java.io.IOException - 入出力エラーが発生した場合

putNextEntry

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

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

putNextEntryAlreadyCompressed

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

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

putNextEntryNotYetCompressed

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

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

closeEntry

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

Throws:
java.io.IOException - 入出力エラーが発生した場合

LHA Library for Java

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.