public class LhaImmediateOutputStream
extends java.io.OutputStream
LhaCompressFiles( String arcfile, File[] files ){ LhaImmediateOutputStream lio = new LhaImmediateOutputStream( arcfile ); for( int i = 0 ; i < files.length ; i++ ){ RandomAccessFile raf = new RandomAccessFile( files[i] ); LhaHeader header = new LhaHeader( files[i].getName() ); header.setLastModified( new Date( files.lastModified() ) ); header.setOriginalSize( files.length() ); byte[] buffer = new byte[8192]; int length; while( 0 <= ( length = raf.read( buffer ) ) ){ lio.write( buffer, 0, length ); } if( !lio.closeEntry() ){ header.setCompressMethod( CompressMethod.LH0 ); lio.putNextEntry( lhaheader ); raf.seek( 0 ); while( 0 <= ( length = raf.read( buffer ) ) ){ lio.write( buffer, 0, length ); } lio.closeEntry(); } lio.close(); }進捗報告を実装する場合、このような処理をクラス内に隠蔽すると進捗報告は何秒間か 時によっては何十分も応答しなくなる。(例えばギガバイト級のデータを扱った場合) LhaRetainedOutputStream で発生する、このような事態を避けるために設計されている。
-- revision history -- $Log: LhaImmediateOutputStream.java,v $ Revision 1.2 2002/12/11 02:25:06 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] ソース整備 タブ廃止 ライセンス文の修正
Constructor and Description |
---|
LhaImmediateOutputStream(java.io.File filename)
filename のファイルに 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには LhaProperty.getProperties() で得られたプロパティが使用される。 |
LhaImmediateOutputStream(java.io.File filename,
java.util.Properties property)
filename のファイルに 圧縮データを出力するOutputStreamを構築する。
|
LhaImmediateOutputStream(java.io.RandomAccessFile file)
fileに 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには LhaProperty.getProperties() で得られたプロパティが使用される。 |
LhaImmediateOutputStream(java.io.RandomAccessFile file,
java.util.Properties property)
fileに 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには LhaProperty.getProperties() で得られたプロパティが使用される。 |
LhaImmediateOutputStream(java.lang.String filename)
filename のファイルに 圧縮データを出力するOutputStreamを構築する。
各圧縮形式に対応した符号器の生成式等を持つプロパティには LhaProperty.getProperties() で得られたプロパティが使用される。 |
LhaImmediateOutputStream(java.lang.String filename,
java.util.Properties property)
filename のファイルに 圧縮データを出力するOutputStreamを構築する。
|
Modifier and Type | Method and Description |
---|---|
void |
close()
出力先に全てのデータを出力し、ストリームを閉じる。
また、使用していた全てのリソースを解放する。 |
boolean |
closeEntry()
現在出力中のエントリを閉じ、次のエントリが出力可能な状態にする。
putNextEntryNotYetCompressed() で開いたエントリを閉じる場合 このメソッドは圧縮に失敗した(圧縮後サイズが圧縮前サイズを上回った)場合、 エントリ全体を書き込み先 の RandomAccessFile から削除する。 この削除処理は単に ファイルポインタを エントリ開始位置まで巻き戻すだけなので RandomAccessFile に setLength() が無い jdk1.1 以前では エントリを無圧縮(もしくは他の圧縮法)で再出力しない場合、 書庫データの終端以降に圧縮に失敗した不完全なデータが残ったままになる。 |
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 に CompressedSize,CRCが指定されていても無
視される。このメソッドに渡される header には
LhaHeader.setOriginalSize() を用いて 正確なオリジナルサイズ
が指定されている必要がある。
|
void |
write(byte[] buffer)
現在のエントリに bufferの内容を全て書き出す。
|
void |
write(byte[] buffer,
int index,
int length)
現在のエントリに bufferの indexから
lengthバイトのデータを書き出す。
|
void |
write(int data)
現在のエントリに1バイトのデータを書きこむ。
|
public LhaImmediateOutputStream(java.lang.String filename) throws java.io.FileNotFoundException
filename
- 圧縮データを書きこむファイルの名前java.io.FileNotFoundException
- filename で与えられたファイルが見つからない場合。java.lang.SecurityException
- セキュリティマネージャがファイルへのアクセスを許さない場合。LhaProperty.getProperties()
public LhaImmediateOutputStream(java.lang.String filename, java.util.Properties property) throws java.io.FileNotFoundException
filename
- 圧縮データを書きこむファイルの名前property
- 各圧縮形式に対応した符号器の生成式等が含まれるプロパティjava.io.FileNotFoundException
- filename で与えられたファイルが見つからない場合。java.lang.SecurityException
- セキュリティマネージャがファイルへのアクセスを許さない場合。LhaProperty
public LhaImmediateOutputStream(java.io.File filename) throws java.io.IOException
filename
- 圧縮データを書きこむファイルの名前java.io.FileNotFoundException
- filename で与えられたファイルが見つからない場合。java.lang.SecurityException
- セキュリティマネージャがファイルへのアクセスを許さない場合。java.io.IOException
- JDK1.2 でコンパイルするためだけに存在する。LhaProperty.getProperties()
public LhaImmediateOutputStream(java.io.File filename, java.util.Properties property) throws java.io.IOException
filename
- 圧縮データを書きこむファイルの名前property
- 各圧縮形式に対応した符号器の生成式等が含まれるプロパティjava.io.FileNotFoundException
- filename で与えられたファイルが見つからない場合。java.lang.SecurityException
- セキュリティマネージャがファイルへのアクセスを許さない場合。java.io.IOException
- JDK1.2 でコンパイルするためだけに存在する。LhaProperty
public LhaImmediateOutputStream(java.io.RandomAccessFile file)
file
- RandomAccessFile のインスタンス。LhaProperty.getProperties()
public LhaImmediateOutputStream(java.io.RandomAccessFile file, java.util.Properties property)
file
- RandomAccessFile のインスタンス。property
- 各圧縮形式に対応した符号器の生成式等が含まれるプロパティLhaProperty
public void write(int data) throws java.io.IOException
write
in class java.io.OutputStream
data
- 書きこむデータjava.io.IOException
- 入出力エラーが発生した場合。public void write(byte[] buffer) throws java.io.IOException
write
in class java.io.OutputStream
buffer
- 書き出すデータの入ったバイト配列java.io.IOException
- 入出力エラーが発生した場合。public void write(byte[] buffer, int index, int length) throws java.io.IOException
write
in class java.io.OutputStream
buffer
- 書き出すデータの入ったバイト配列index
- buffer内の書き出すべきデータの開始位置length
- データのバイト数java.io.IOException
- 入出力エラーが発生した場合。public void flush() throws java.io.IOException
flush
in interface java.io.Flushable
flush
in class java.io.OutputStream
java.io.IOException
- 入出力エラーが発生した場合PostLzssEncoder.flush()
,
LzssOutputStream.flush()
public void close() throws java.io.IOException
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
close
in class java.io.OutputStream
java.io.IOException
- 入出力エラーが発生した場合public void putNextEntry(LhaHeader header) throws java.io.IOException
header
- 書きこむエントリについての情報を持つ
LhaHeaderのインスタンス。java.io.IOException
- 入出力エラーが発生した場合java.lang.IllegalArgumentException
- header.getOriginalSize() が LhaHeader.UNKNOWN を返す場合public void putNextEntryAlreadyCompressed(LhaHeader header) throws java.io.IOException
header
- 書きこむエントリについての情報を持つ
LhaHeaderのインスタンス。java.io.IOException
- 入出力エラーが発生した場合java.lang.IllegalArgumentException
- java.lang.IllegalStateException
- 以前のエントリが未だに closeEntry() されていない場合public void putNextEntryNotYetCompressed(LhaHeader header) throws java.io.IOException
header
- 書きこむエントリについての情報を持つ
LhaHeaderのインスタンス。java.io.IOException
- 入出力エラーが発生した場合java.lang.IllegalArgumentException
- header.getOriginalSize() が
LhaHeader.UNKNOWN を返した場合java.lang.IllegalStateException
- 以前のエントリが未だに
closeEntry() されていない場合public boolean closeEntry() throws java.io.IOException
java.io.IOException
- 入出力エラーが発生した場合
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.