jp.gr.java_conf.dangan.util.lha

Class LhaRetainedOutputStream


public class LhaRetainedOutputStream
extends OutputStream

接続されたRandomAccessFileに 圧縮データを出力するためのユーティリティクラス。
java.util.zip.ZipOutputStream と似たインターフェイスを持つように作った。
圧縮失敗時( 圧縮後サイズが圧縮前サイズを上回った場合 )の処理を自動的に行う。 進捗報告を実装する場合、このような処理をクラス内に隠蔽すると進捗報告は何秒間か 時によっては何十分も応答しなくなる。(例えばギガバイト級のデータを扱った場合) このような事態を避けたい場合は LhaImmediateOutputStreamを使用すること。
また、JDK 1.1 以前では RandomAccessFile が setLength を持たないため、 書庫データの後ろに他のデータがある場合でもファイルサイズを切り詰めることが出来ない。 この問題点は常にサイズ0の新しいファイルを開く事によって回避する事ができる。
 -- revision history --
 $Log: LhaRetainedOutputStream.java,v $
 Revision 1.2  2002/12/11 02:25:14  dangan
 [bug fix]
     jdk1.2 でコンパイルできなかった箇所を修正。

 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.2 $
Author:
$Author: dangan $

Constructor Summary

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

Method Summary

void
close()
出力先に全てのデータを出力し、ストリームを閉じる。
また、使用していた全てのリソースを解放する。
void
closeEntry()
現在出力中のエントリを閉じ、次のエントリが出力可能な状態にする。
圧縮に失敗した(圧縮後サイズが圧縮前サイズを上回った)場合、 解凍し無圧縮で格納する。エントリのサイズが大きい場合、 この処理にはかなりの時間がかかる。
void
flush()
現在書き込み中のエントリのデータを強§的に出力先に書き出す。 これは PostLzssEncoder, LzssOutputStream の規約どおり flush() しなかった場合とは別のデータを出力する。 (大抵の場合は 単に圧縮率が低下するだけである。)
void
putNextEntry(LhaHeader header)
新しいエントリを書き込むようにストリームを設定する。
このメソッドは 既に圧縮済みのエントリの場合は putNextEntryAlreadyCompressed(), 未だに圧縮されていない場合は putNextEntryNotYetCompressed() を呼び出す。
圧縮されているかの判定は、
  • header.getCompressedSize()
  • header.getCRC()
のどれか一つでも LhaHeader.UNKNOWN であれば未だに圧縮されていないとする。
header には正確な OriginalSize が指定されている必要がある。
void
putNextEntryAlreadyCompressed(LhaHeader header)
既に圧縮済みのエントリを書きこむようにストリームを設定する。
圧縮済みデータが正しい事は、呼び出し側が保証する事。
void
putNextEntryNotYetCompressed(LhaHeader header)
未だに圧縮されていないエントリを書きこむようにストリームを設定する。
header には正確な OriginalSize が指定されている必要がある。
header に 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

LhaRetainedOutputStream

public LhaRetainedOutputStream(File filename)
            throws IOException
filename のファイルに 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには LhaProperty.getProperties() で得られたプロパティが使用される。
Parameters:
filename - 圧縮データを書きこむファイルの名前

LhaRetainedOutputStream

public LhaRetainedOutputStream(File filename,
                               Properties property)
            throws IOException
filename のファイルに 圧縮データを出力するOutputStreamを構築する。
Parameters:
filename - 圧縮データを書きこむファイルの名前
property - 各圧縮形式に対応した符号器の生成式等が含まれるプロパティ

LhaRetainedOutputStream

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

LhaRetainedOutputStream

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

LhaRetainedOutputStream

public LhaRetainedOutputStream(String filename)
            throws FileNotFoundException
filename のファイルに 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには LhaProperty.getProperties() で得られたプロパティが使用される。
Parameters:
filename - 圧縮データを書きこむファイルの名前

LhaRetainedOutputStream

public LhaRetainedOutputStream(String filename,
                               Properties property)
            throws FileNotFoundException
filename のファイルに 圧縮データを出力するOutputStreamを構築する。
Parameters:
filename - 圧縮データを書きこむファイルの名前
property - 各圧縮形式に対応した符号器の生成式等が含まれるプロパティ

Method Details

close

public void close()
            throws IOException
出力先に全てのデータを出力し、ストリームを閉じる。
また、使用していた全てのリソースを解放する。

closeEntry

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

flush

public void flush()
            throws IOException
現在書き込み中のエントリのデータを強§的に出力先に書き出す。 これは PostLzssEncoder, LzssOutputStream の規約どおり flush() しなかった場合とは別のデータを出力する。 (大抵の場合は 単に圧縮率が低下するだけである。)

putNextEntry

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

putNextEntryAlreadyCompressed

public void putNextEntryAlreadyCompressed(LhaHeader header)
            throws IOException
既に圧縮済みのエントリを書きこむようにストリームを設定する。
圧縮済みデータが正しい事は、呼び出し側が保証する事。
Parameters:
header - 書きこむエントリについての情報を持つ LhaHeaderのインスタンス。

putNextEntryNotYetCompressed

public void putNextEntryNotYetCompressed(LhaHeader header)
            throws IOException
未だに圧縮されていないエントリを書きこむようにストリームを設定する。
header には正確な OriginalSize が指定されている必要がある。
header に 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.