public class LzssOutputStream
extends java.io.OutputStream
-- 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() を使用する。 ソース整備 タブ廃止 ライセンス文の修正
Modifier and Type | Field and Description |
---|---|
static int |
NOMATCH
searchret がこの値だった場合、
検索の結果、閾値以上の一致が見つからなかった事を示す。
|
Constructor and Description |
---|
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に出力する
出力ストリームを構築する。
|
Modifier and Type | Method and Description |
---|---|
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 で明示的に出力を指示した時のみ。 |
public static final int NOMATCH
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[] )
を持たない場合public void write(int data) throws java.io.IOException
write
in class java.io.OutputStream
data
- 1バイトのデータ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
- 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.Flushable
flush
in class java.io.OutputStream
java.io.IOException
- 入出力エラーが発生した場合PostLzssEncoder.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 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 の戻り値
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.