jp.gr.java_conf.dangan.util.lha

Class LzssOutputStream


public class LzssOutputStream
extends OutputStream

データを 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() を使用する。
     ソース整備
     タブ廃止
     ライセンス文の修正

 
Version:
$Revision: 1.2 $
Author:
$Author: dangan $

Field Summary

static int
NOMATCH
searchret がこの値だった場合、 検索の結果、閾値以上の一致が見つからなかった事を示す。

Constructor Summary

LzssOutputStream(PostLzssEncoder encoder)
write() によって書きこまれたデータを LZSSで圧縮し、圧縮したデータを encoderに出力する 出力ストリームを構築する。
LzssOutputStream(PostLzssEncoder encoder, String LzssSearchMethodClassName)
write() によって書きこまれたデータを LZSSで圧縮し、圧縮したデータを encoderに出力する 出力ストリームを構築する。
LzssOutputStream(PostLzssEncoder encoder, String LzssSearchMethodClassName, 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 圧縮を全く行わない。
  public void wrongCompress( InputStream in, LzssOutputSteam out ){
      int r;
      while( 0 <= r = in.read() ){
          out.write( r );
          out.flush();
      }
  }
 
また、このメソッドは PostLzssEncoder.flush() を呼び出すため flush() しない場合と比べて、出力データが変化する可能性がある。
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 で明示的に出力を指示した時のみ。

Field Details

NOMATCH

public static final int NOMATCH
searchret がこの値だった場合、 検索の結果、閾値以上の一致が見つからなかった事を示す。
Field Value:
-1

Constructor Details

LzssOutputStream

public LzssOutputStream(PostLzssEncoder encoder)
write() によって書きこまれたデータを LZSSで圧縮し、圧縮したデータを encoderに出力する 出力ストリームを構築する。
Parameters:
encoder - LZSS圧縮データ出力ストリーム

LzssOutputStream

public LzssOutputStream(PostLzssEncoder encoder,
                        String LzssSearchMethodClassName)
write() によって書きこまれたデータを LZSSで圧縮し、圧縮したデータを encoderに出力する 出力ストリームを構築する。
Parameters:
encoder - LZSS圧縮データ出力ストリーム
LzssSearchMethodClassName - LzssSearchMethod の実装を示すパッケージ名も含めたクラス名

LzssOutputStream

public LzssOutputStream(PostLzssEncoder encoder,
                        String LzssSearchMethodClassName,
                        Object[] LzssSearchMethodExtraArguments)
write() によって書きこまれたデータを LZSSで圧縮し、圧縮したデータを encoderに出力する 出力ストリームを構築する。
Parameters:
encoder - LZSS圧縮データ出力ストリーム
LzssSearchMethodClassName - LzssSearchMethod の実装を示すパッケージ名も含めたクラス名

Method Details

close

public void close()
            throws IOException
このクラスに貯えられた全てのデータを接続された PostLzssEncoder に出力し この出力ストリームと、 接続されたストリームを閉じ、 使用していたリソースを開放する。

createSearchReturn

public static final int createSearchReturn(int matchlen,
                                           int matchpos)
search の戻り値を生成する。 search は一致位置を返すが、一致長も同時に返したほうが 非常に便利であるため、一致位置も一致長も必要なビット数が 少ないことを利用して int型でやり取りする。 そのための統一した処理を約束する関数。 この関数で生成された値から 一致位置や一致長を取り出す際には getMatchLen、 getMatchPos を使用する。
Parameters:
matchlen - 一致長
matchpos - 一致位置
Returns:
一致長と一致位置の情報を含むsearchの戻り値

flush

public void flush()
            throws IOException
圧縮機構に書き込まれた全てのデータを 接続された PostLzssEncoder に出力し、 接続された PostLzssEncoder を flush() する。
このとき、出力するデータの終端付近では 検索に search() を使用するため圧縮速度が低下する。 また flush() しない場合と比べて圧縮率が変化する。 これは flush() した位置付近ではデータパタンの検索に MaxMatch に満たないデータパタンを使用するため、 検索結果が不完全になるため。 この圧縮率の変化は、多くの場合圧縮率が少々低下するだけであるが、 例えば次のようなコードは LZ 圧縮を全く行わない。
  public void wrongCompress( InputStream in, LzssOutputSteam out ){
      int r;
      while( 0 <= r = in.read() ){
          out.write( r );
          out.flush();
      }
  }
 
また、このメソッドは PostLzssEncoder.flush() を呼び出すため flush() しない場合と比べて、出力データが変化する可能性がある。

getMatchLen

public static final int getMatchLen(int searchret)
createSearchReturn で生成された searchの戻り値から 一致長を取り出す。
Parameters:
searchret - search の戻り値
Returns:
一致長

getMatchPos

public static final int getMatchPos(int searchret)
createSearchReturn で生成された searchの戻り値から 一致位置を取り出す。
Parameters:
searchret - search の戻り値
Returns:
一致位置

write

public void write(byte[] buffer)
            throws IOException
圧縮機構に buffer 内のデータを全て出力する。
実際にPostLzssEncoder にデータが渡されるのは TextBuffer が満たされたときか、 flush で明示的に出力を指示した時のみ。
Parameters:
buffer - データの格納されたバッファ

write

public void write(byte[] buffer,
                  int index,
                  int length)
            throws IOException
圧縮機構に buffer 内の index から lengthバイトのデータを出力する。
実際にPostLzssEncoder にデータが渡されるのは TextBuffer が満たされたときか、 flush で明示的に出力を指示した時のみ。
Parameters:
buffer - データの格納されたバッファ
index - buffer内データ開始位置
length - buffer内データの長さ

write

public void write(int data)
            throws IOException
圧縮機構に1バイトのデータを出力する。
実際にPostLzssEncoder にデータが渡されるのは TextBuffer が満たされたときか、 flush で明示的に出力を指示した時のみ。
Parameters:
data - 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.