|
LHA Library for Java | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectjava.io.OutputStream
jp.gr.java_conf.dangan.util.lha.LzssOutputStream
public class LzssOutputStream
データを LZSS圧縮しながら
指定された PostLzssEncoder に出力する圧縮用出力ストリーム。
-- revision history --
$Log: LzssOutputStream.java,v $
Revision 1.2 2002/12/06 00:00:00 dangan
[change]
flush() で write() された全てのデータを
接続された PostLzssEncoder に出力するように修正。
[maintenance]
slide幅が常に DictionarySize バイトになるように修正。
Revision 1.1 2002/10/20 00:00:00 dangan
[bug fix]
初期状態で flush() したり 連続で flush() すると
( lastsearchret が NEEDSEARCH の時に encode() が呼ばれると )
直後の 1バイトが化けていた。
flush() 時に putLength() を考慮していなかったため
検索機構を破壊するような searchAndPut を行っていたのを修正。
flush() 時に TextBuffer 最後尾のMaxMatchバイトのデータを出力していなかった。
Revision 1.0 2002/07/25 00:00:00 dangan
add to version control
[bug fix]
getMatchLen() で searchret >> 22 とすべきところが
searchret >>> 22 となっていたのを修正。
[maintenance]
LhaUtil.createInstance() の使用をやめ
代わりに Factory.createInstance() を使用する。
ソース整備
タブ廃止
ライセンス文の修正
| Field Summary | |
|---|---|
static int |
NOMATCH
searchret がこの値だった場合、 検索の結果、閾値以上の一致が見つからなかった事を示す。 |
| Constructor Summary | |
|---|---|
LzssOutputStream(PostLzssEncoder encoder)
write() によって書きこまれたデータを LZSSで圧縮し、圧縮したデータを encoderに出力する 出力ストリームを構築する。 |
|
LzssOutputStream(PostLzssEncoder encoder,
java.lang.String LzssSearchMethodClassName)
write() によって書きこまれたデータを LZSSで圧縮し、圧縮したデータを encoderに出力する 出力ストリームを構築する。 |
|
LzssOutputStream(PostLzssEncoder encoder,
java.lang.String LzssSearchMethodClassName,
java.lang.Object[] LzssSearchMethodExtraArguments)
write() によって書きこまれたデータを LZSSで圧縮し、圧縮したデータを encoderに出力する 出力ストリームを構築する。 |
|
| Method Summary | |
|---|---|
void |
close()
このクラスに貯えられた全てのデータを接続された PostLzssEncoder に出力し この出力ストリームと、 接続されたストリームを閉じ、 使用していたリソースを開放する。 |
static int |
createSearchReturn(int matchlen,
int matchpos)
search の戻り値を生成する。 search は一致位置を返すが、一致長も同時に返したほうが 非常に便利であるため、一致位置も一致長も必要なビット数が 少ないことを利用して int型でやり取りする。 そのための統一した処理を約束する関数。 この関数で生成された値から 一致位置や一致長を取り出す際には getMatchLen、 getMatchPos を使用する。 |
void |
flush()
圧縮機構に書き込まれた全てのデータを 接続された PostLzssEncoder に出力し、 接続された PostLzssEncoder を flush() する。 このとき、出力するデータの終端付近では 検索に search() を使用するため圧縮速度が低下する。 また flush() しない場合と比べて圧縮率が変化する。 これは flush() した位置付近ではデータパタンの検索に MaxMatch に満たないデータパタンを使用するため、 検索結果が不完全になるため。 この圧縮率の変化は、多くの場合圧縮率が少々低下するだけであるが、 例えば次のようなコードは LZ 圧縮を全く行わない。 |
static int |
getMatchLen(int searchret)
createSearchReturn で生成された searchの戻り値から 一致長を取り出す。 |
static int |
getMatchPos(int searchret)
createSearchReturn で生成された searchの戻り値から 一致位置を取り出す。 |
void |
write(byte[] buffer)
圧縮機構に buffer 内のデータを全て出力する。 実際にPostLzssEncoder にデータが渡されるのは TextBuffer が満たされたときか、 flush で明示的に出力を指示した時のみ。 |
void |
write(byte[] buffer,
int index,
int length)
圧縮機構に buffer 内の index から lengthバイトのデータを出力する。 実際にPostLzssEncoder にデータが渡されるのは TextBuffer が満たされたときか、 flush で明示的に出力を指示した時のみ。 |
void |
write(int data)
圧縮機構に1バイトのデータを出力する。 実際にPostLzssEncoder にデータが渡されるのは TextBuffer が満たされたときか、 flush で明示的に出力を指示した時のみ。 |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public static final int NOMATCH
| Constructor Detail |
|---|
public LzssOutputStream(PostLzssEncoder encoder)
encoder - LZSS圧縮データ出力ストリーム
public LzssOutputStream(PostLzssEncoder encoder,
java.lang.String LzssSearchMethodClassName)
encoder - LZSS圧縮データ出力ストリームLzssSearchMethodClassName - LzssSearchMethod の実装を示すパッケージ名も含めたクラス名
java.lang.NoClassDefFoundError - LzssSearchMethodClassName で与えられたクラスが
見つからない場合。
java.lang.InstantiationError - LzssSearchMethodClassName で与えられたクラスが
abstract class であるためインスタンスを生成できない場合。
java.lang.NoSuchMethodError - LzssSearchMethodClassName で与えられたクラスが
コンストラクタ LzssSearchMethod( int, int, int, byte[], int )
を持たない場合
public LzssOutputStream(PostLzssEncoder encoder,
java.lang.String LzssSearchMethodClassName,
java.lang.Object[] LzssSearchMethodExtraArguments)
encoder - LZSS圧縮データ出力ストリームLzssSearchMethodClassName - LzssSearchMethod の実装を示すパッケージ名も含めたクラス名
java.lang.NoClassDefFoundError - LzssSearchMethodClassName で与えられたクラスが
見つからない場合。
java.lang.InstantiationError - LzssSearchMethodClassName で与えられたクラスが
abstract class であるためインスタンスを生成できない場合。
java.lang.NoSuchMethodError - LzssSearchMethodClassName で与えられたクラスが
コンストラクタ LzssSearchMethod( int, int, int, byte[] )
を持たない場合| Method Detail |
|---|
public void write(int data)
throws java.io.IOException
write in class java.io.OutputStreamdata - 1バイトのデータ
java.io.IOException - 入出力エラーが発生した場合
public void write(byte[] buffer)
throws java.io.IOException
write in class java.io.OutputStreambuffer - データの格納されたバッファ
java.io.IOException - 入出力エラーが発生した場合
public void write(byte[] buffer,
int index,
int length)
throws java.io.IOException
write in class java.io.OutputStreambuffer - データの格納されたバッファindex - buffer内データ開始位置length - buffer内データの長さ
java.io.IOException - 入出力エラーが発生した場合
public void flush()
throws java.io.IOException
public void wrongCompress( InputStream in, LzssOutputSteam out ){
int r;
while( 0 <= r = in.read() ){
out.write( r );
out.flush();
}
}
また、このメソッドは PostLzssEncoder.flush() を呼び出すため
flush() しない場合と比べて、出力データが変化する可能性がある。
flush in interface java.io.Flushableflush in class java.io.OutputStreamjava.io.IOException - 入出力エラーが発生した場合PostLzssEncoder.flush()
public void close()
throws java.io.IOException
close in interface java.io.Closeableclose in class java.io.OutputStreamjava.io.IOException - 入出力エラーが発生した場合
public static final int createSearchReturn(int matchlen,
int matchpos)
matchlen - 一致長matchpos - 一致位置
public static final int getMatchLen(int searchret)
searchret - search の戻り値
public static final int getMatchPos(int searchret)
searchret - search の戻り値
|
LHA Library for Java | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||