LHA Library for Java

jp.gr.java_conf.dangan.util.lha
クラス LzssOutputStream

java.lang.Object
  拡張java.io.OutputStream
      拡張jp.gr.java_conf.dangan.util.lha.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() を使用する。
     ソース整備
     タブ廃止
     ライセンス文の修正

 

バージョン:
$Revision: 1.2 $
作成者:
$Author: dangan $

フィールドの概要
static int NOMATCH
          searchret がこの値だった場合、 検索の結果、閾値以上の一致が見つからなかった事を示す。
 
コンストラクタの概要
LzssOutputStream(PostLzssEncoder encoder)
          write() によって書きこまれたデータを LZSSで圧縮し、圧縮したデータを encoderに出力する 出力ストリームを構築する。
LzssOutputStream(PostLzssEncoder encoder, String LzssSearchMethodClassName)
          write() によって書きこまれたデータを LZSSで圧縮し、圧縮したデータを encoderに出力する 出力ストリームを構築する。
LzssOutputStream(PostLzssEncoder encoder, String LzssSearchMethodClassName, Object[] LzssSearchMethodExtraArguments)
          write() によって書きこまれたデータを LZSSで圧縮し、圧縮したデータを encoderに出力する 出力ストリームを構築する。
 
メソッドの概要
 void close()
          このクラスに貯えられた全てのデータを接続された PostLzssEncoder に出力し この出力ストリームと、 接続されたストリームを閉じ、 使用していたリソースを開放する。
static int createSearchReturn(int matchlen, int matchpos)
          search の戻り値を生成する。
 void flush()
          圧縮機構に書き込まれた全てのデータを 接続された PostLzssEncoder に出力し、 接続された PostLzssEncoder を flush() する。
static int getMatchLen(int searchret)
          createSearchReturn で生成された searchの戻り値から 一致長を取り出す。
static int getMatchPos(int searchret)
          createSearchReturn で生成された searchの戻り値から 一致位置を取り出す。
 void write(byte[] buffer)
          圧縮機構に buffer 内のデータを全て出力する。
 void write(byte[] buffer, int index, int length)
          圧縮機構に buffer 内の index から lengthバイトのデータを出力する。
 void write(int data)
          圧縮機構に1バイトのデータを出力する。
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

NOMATCH

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

関連項目:
定数フィールド値
コンストラクタの詳細

LzssOutputStream

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

パラメータ:
encoder - LZSS圧縮データ出力ストリーム

LzssOutputStream

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

パラメータ:
encoder - LZSS圧縮データ出力ストリーム
LzssSearchMethodClassName - LzssSearchMethod の実装を示すパッケージ名も含めたクラス名
例外:
NoClassDefFoundError - LzssSearchMethodClassName で与えられたクラスが 見つからない場合。
InstantiationError - LzssSearchMethodClassName で与えられたクラスが abstract class であるためインスタンスを生成できない場合。
NoSuchMethodError - LzssSearchMethodClassName で与えられたクラスが コンストラクタ LzssSearchMethod( int, int, int, byte[], int ) を持たない場合

LzssOutputStream

public LzssOutputStream(PostLzssEncoder encoder,
                        String LzssSearchMethodClassName,
                        Object[] LzssSearchMethodExtraArguments)
write() によって書きこまれたデータを LZSSで圧縮し、圧縮したデータを encoderに出力する 出力ストリームを構築する。

パラメータ:
encoder - LZSS圧縮データ出力ストリーム
LzssSearchMethodClassName - LzssSearchMethod の実装を示すパッケージ名も含めたクラス名
例外:
NoClassDefFoundError - LzssSearchMethodClassName で与えられたクラスが 見つからない場合。
InstantiationError - LzssSearchMethodClassName で与えられたクラスが abstract class であるためインスタンスを生成できない場合。
NoSuchMethodError - LzssSearchMethodClassName で与えられたクラスが コンストラクタ LzssSearchMethod( int, int, int, byte[] ) を持たない場合
メソッドの詳細

write

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

パラメータ:
data - 1バイトのデータ
例外:
IOException - 入出力エラーが発生した場合

write

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

パラメータ:
buffer - データの格納されたバッファ
例外:
IOException - 入出力エラーが発生した場合

write

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

パラメータ:
buffer - データの格納されたバッファ
index - buffer内データ開始位置
length - buffer内データの長さ
例外:
IOException - 入出力エラーが発生した場合

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() しない場合と比べて、出力データが変化する可能性がある。

例外:
IOException - 入出力エラーが発生した場合
関連項目:
PostLzssEncoder.flush()

close

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

例外:
IOException - 入出力エラーが発生した場合

createSearchReturn

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

パラメータ:
matchlen - 一致長
matchpos - 一致位置
戻り値:
一致長と一致位置の情報を含むsearchの戻り値

getMatchLen

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

パラメータ:
searchret - search の戻り値
戻り値:
一致長

getMatchPos

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

パラメータ:
searchret - search の戻り値
戻り値:
一致位置

LHA Library for Java

バグやドキュメントの誤りの報告は作者宛てにお願いします。
ドキュメント内に含まれる社名、製品名については一般に各社の商標または登録商標です。
Copyright © 2001-2002 Michel Ishizuka. All Rights Reserved.