LHA Library for Java

jp.gr.java_conf.dangan.util.lha
Class LzssOutputStream

java.lang.Object
  extended by java.io.OutputStream
      extended by jp.gr.java_conf.dangan.util.lha.LzssOutputStream
All Implemented Interfaces:
java.io.Closeable, java.io.Flushable

public class LzssOutputStream
extends java.io.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, 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

NOMATCH

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

See Also:
Constant Field Values
Constructor Detail

LzssOutputStream

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

Parameters:
encoder - LZSS圧縮データ出力ストリーム

LzssOutputStream

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

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

LzssOutputStream

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

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

write

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

Specified by:
write in class java.io.OutputStream
Parameters:
data - 1バイトのデータ
Throws:
java.io.IOException - 入出力エラーが発生した場合

write

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

Overrides:
write in class java.io.OutputStream
Parameters:
buffer - データの格納されたバッファ
Throws:
java.io.IOException - 入出力エラーが発生した場合

write

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

Overrides:
write in class java.io.OutputStream
Parameters:
buffer - データの格納されたバッファ
index - buffer内データ開始位置
length - buffer内データの長さ
Throws:
java.io.IOException - 入出力エラーが発生した場合

flush

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

Specified by:
flush in interface java.io.Flushable
Overrides:
flush in class java.io.OutputStream
Throws:
java.io.IOException - 入出力エラーが発生した場合
See Also:
PostLzssEncoder.flush()

close

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

Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.OutputStream
Throws:
java.io.IOException - 入出力エラーが発生した場合

createSearchReturn

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

Parameters:
matchlen - 一致長
matchpos - 一致位置
Returns:
一致長と一致位置の情報を含むsearchの戻り値

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:
一致位置

LHA Library for Java

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.