jp.gr.java_conf.dangan.util.lha
Class LhaRetainedOutputStream
OutputStreamjp.gr.java_conf.dangan.util.lha.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]
ソース整備
タブ廃止
ライセンス文の修正
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を構築する。
|
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バイトのデータを書きこむ。
|
LhaRetainedOutputStream
public LhaRetainedOutputStream(File filename)
throws IOException filename のファイルに 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには
LhaProperty.getProperties() で得られたプロパティが使用される。
filename - 圧縮データを書きこむファイルの名前
LhaRetainedOutputStream
public LhaRetainedOutputStream(File filename,
Properties property)
throws IOException filename のファイルに 圧縮データを出力するOutputStreamを構築する。
filename - 圧縮データを書きこむファイルの名前property - 各圧縮形式に対応した符号器の生成式等が含まれるプロパティ
LhaRetainedOutputStream
public LhaRetainedOutputStream(RandomAccessFile file)
fileに 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには
LhaProperty.getProperties() で得られたプロパティが使用される。
file - RandomAccessFile のインスタンス。
- 既に close() されていない事。
- コンストラクタの mode には "rw" オプションを使用して、
読みこみと書きこみが出来るように生成されたインスタンスであること。
の条件を満たすもの。
LhaRetainedOutputStream
public LhaRetainedOutputStream(RandomAccessFile file,
Properties property) fileに 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには
LhaProperty.getProperties() で得られたプロパティが使用される。
file - RandomAccessFile のインスタンス。
- 既に close() されていない事。
- コンストラクタの mode には "rw" オプションを使用して、
読みこみと書きこみが出来るように生成されたインスタンスであること。
の条件を満たすもの。property - 各圧縮形式に対応した符号器の生成式等が含まれるプロパティ
LhaRetainedOutputStream
public LhaRetainedOutputStream(String filename)
throws FileNotFoundException filename のファイルに 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには
LhaProperty.getProperties() で得られたプロパティが使用される。
filename - 圧縮データを書きこむファイルの名前
LhaRetainedOutputStream
public LhaRetainedOutputStream(String filename,
Properties property)
throws FileNotFoundException filename のファイルに 圧縮データを出力するOutputStreamを構築する。
filename - 圧縮データを書きこむファイルの名前property - 各圧縮形式に対応した符号器の生成式等が含まれるプロパティ
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 が指定されている必要がある。
header - 書きこむエントリについての情報を持つ
LhaHeaderのインスタンス。
putNextEntryAlreadyCompressed
public void putNextEntryAlreadyCompressed(LhaHeader header)
throws IOException 既に圧縮済みのエントリを書きこむようにストリームを設定する。
圧縮済みデータが正しい事は、呼び出し側が保証する事。
header - 書きこむエントリについての情報を持つ
LhaHeaderのインスタンス。
putNextEntryNotYetCompressed
public void putNextEntryNotYetCompressed(LhaHeader header)
throws IOException 未だに圧縮されていないエントリを書きこむようにストリームを設定する。
header には正確な OriginalSize が指定されている必要がある。
header に CompressedSize, CRCが指定されていても無視される。
header - 書きこむエントリについての情報を持つ
LhaHeaderのインスタンス。
write
public void write(byte[] buffer)
throws IOException 現在のエントリに bufferの内容を全て書き出す。
buffer - 書き出すデータの入ったバイト配列
write
public void write(byte[] buffer,
int index,
int length)
throws IOException 現在のエントリに bufferの indexから
lengthバイトのデータを書き出す。
buffer - 書き出すデータの入ったバイト配列index - buffer内の書き出すべきデータの開始位置length - データのバイト数
write
public void write(int data)
throws IOException 現在のエントリに1バイトのデータを書きこむ。
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.