LHA Library for Java

Package jp.gr.java_conf.dangan.util.lha

Interface Summary
HashMethod ハッシュ関数を提供するインターフェイス。

コンストラクタの形式は
LzssSearchMethod LzssOutputStream で使用される 最長一致検索を提供するインターフェイス。

コンストラクタの形式は
PostLzssEncoder LZSS圧縮コードを処理する インターフェイス。
PreLzssDecoder LZSS圧縮コードを供給するインターフェイス。
 

Class Summary
BinaryTreeSearch 二分木を使用した LzssSearchMethod の実装。
CompressMethod LHAの各種定数を定義する。
CRC16 CRC16値を算出するためのクラス。 クラス内の定数、処理、説明は
DynamicHuffman 動的ハフマンを扱うクラス。
HashAndBinaryTreeSearch ハッシュと二分木を使った LzssSearchMethod の実装。
HashAndChainedListSearch ハッシュと単方向連結リストを使って高速化された LzssSearchMethod。
検索を打ち切ることによる高速化も行っているため、 必ず最長一致を見つけることが出来るとは限らない。
HashDefault 試作プログラム ar940528 や LHa for Unix で使用されているハッシュ関数。
gzip で使用されているを参考にしたようだ。
HashShort データパタンの先頭2バイトから 0 〜 4095 のハッシュ値を生成するハッシュ関数。
LhaChecksum LHAで使用される 単純な 1バイトのチェックサム値を 算出するためのクラス。
LhaFile LHA書庫ファイルからエントリデータを読み出す InputStreamを得るためのユーティリティクラス。
java.util.zip.ZipFile と似た インターフェイスを持つように作った。 CRC16等によるチェックは行わない。
LhaHeader LHAヘッダを扱う。
このクラスは java.util.zip パッケージでは ZipEntry と近いが、 ヘッダの入出力のためのユーティリティ関数を持つ点が違う。
このクラスは set系メソッドで為された方が良いチェックを getBytes() 時に行うように書かれている。その点は注意すること。
LhaImmediateOutputStream 接続されたRandomAccessFileに 圧縮データを出力するためのユーティリティクラス。
java.util.zip.ZipOutputStream と似たインターフェイスを持つように作った。
圧縮失敗時( 圧縮後サイズが圧縮前サイズを上回った場合 )の処理を 手動で行わなければならない。 以下に そのようなコードを示す。
LhaInputStream 接続されたストリームからLHA書庫データを読みこみ、 エントリを解凍しつつ読み込むためのユーティリティクラス。
java.util.zip.ZipInputStream と似たインターフェイスを持つように作った。
壊れた書庫の処理に関しては壊れたエントリ以降の 壊れていないエントリも正常に読みこめない可能性がある。
LhaOutputStream 接続されたストリームに 圧縮データを出力するためのユーティリティクラス。
java.util.zip.ZipOutputStream と似たインターフェイスを持つように作った。 Zipと違い、LHAの出力は本来 2パスであるため、1つのエントリを圧縮するまで、 エントリ全体のデータを持つ一時記憶領域が必要となる。 そのような記憶領域を使用したくない場合は LhaRetainedOutputStream か LhaImmediateOutputStream を使用する事。
LhaProperty LHA Library for Java の各種設定を扱う。
LhaProperty.getProperty() や LhaProperty.getProperties() で得られる値は システムプロパティ、設定ファイル、デフォルト値の何れかが用いられ、 その優先順位は以下のようになる。 システムプロパティ に設定されている値。 jp/gr/java_conf/dangan/util/lha/resources/lha.properties に設定された値。 デフォルト値。

キーの一覧は以下のとおり。
キー 対応する値の説明 lha.encoding String とヘッダ内の文字列との相互変換に用いるエンコーディング lha.packages 生成式内で使われるクラスのパッケージ名の列挙(カンマ区切り) lha.lzs.encoder -lzs- 形式への符号化を行うオブジェクトの生成式 lha.lz4.encoder -lz4- 形式への符号化を行うオブジェクトの生成式 lha.lz5.encoder -lz5- 形式への符号化を行うオブジェクトの生成式 lha.lh0.encoder -lh0- 形式への符号化を行うオブジェクトの生成式 lha.lh1.encoder -lh1- 形式への符号化を行うオブジェクトの生成式 lha.lh2.encoder -lh2- 形式への符号化を行うオブジェクトの生成式 lha.lh3.encoder -lh3- 形式への符号化を行うオブジェクトの生成式 lha.lh4.encoder -lh4- 形式への符号化を行うオブジェクトの生成式 lha.lh5.encoder -lh5- 形式への符号化を行うオブジェクトの生成式 lha.lh6.encoder -lh6- 形式への符号化を行うオブジェクトの生成式 lha.lh7.encoder -lh7- 形式への符号化を行うオブジェクトの生成式 lha.lhd.encoder -lhd- 形式への符号化を行うオブジェクトの生成式 lha.lzs.decoder -lzs- 形式のデータを復号化するオブジェクトの生成式 lha.lz4.decoder -lz4- 形式のデータを復号化するオブジェクトの生成式 lha.lz5.decoder -lz5- 形式のデータを復号化するオブジェクトの生成式 lha.lh0.decoder -lh0- 形式のデータを復号化するオブジェクトの生成式 lha.lh1.decoder -lh1- 形式のデータを復号化するオブジェクトの生成式 lha.lh2.decoder -lh2- 形式のデータを復号化するオブジェクトの生成式 lha.lh3.decoder -lh3- 形式のデータを復号化するオブジェクトの生成式 lha.lh4.decoder -lh4- 形式のデータを復号化するオブジェクトの生成式 lha.lh5.decoder -lh5- 形式のデータを復号化するオブジェクトの生成式 lha.lh6.decoder -lh6- 形式のデータを復号化するオブジェクトの生成式 lha.lh7.decoder -lh7- 形式のデータを復号化するオブジェクトの生成式 lha.lhd.decoder -lhd- 形式のデータを復号化するオブジェクトの生成式 lha.header LhaHeader のインスタンスの生成式
生成式は以下のように定義される。
<生成式> ::= <コンストラクタ> | <配列> | <置換文字列> | <クラス名> | <文字列> <コンストラクタ> ::= <クラス名> '(' 引数 ')' <引数> ::= [ <生成式> [ ',' <引数> ] ] <配列> ::= '[' <要素> ']' <要素> ::= [ <生成式> [ ',' <要素> ] ]
クラス名は "lha.packages" に対応する値を使用して完全修飾名へと変換される。
置換文字列 はライブラリ内部でオブジェクトに置換される文字列で 現在以下の4種類が定義されている。
lha.???.encoder out 圧縮後のデータを受け取る java.io.OutputStream lha.???.decoder in 圧縮データを供給する java.io.InputStream length 復号化されたデータのバイト数 lha.header data ヘッダデータを格納した byte配列 encoding ヘッダ内の文字データを String に変換する際に使用するエンコーディング
LhaRetainedOutputStream 接続されたRandomAccessFileに 圧縮データを出力するためのユーティリティクラス。
java.util.zip.ZipOutputStream と似たインターフェイスを持つように作った。
圧縮失敗時( 圧縮後サイズが圧縮前サイズを上回った場合 )の処理を自動的に行う。 進捗報告を実装する場合、このような処理をクラス内に隠蔽すると進捗報告は何秒間か 時によっては何十分も応答しなくなる。(例えばギガバイト級のデータを扱った場合) このような事態を避けたい場合は LhaImmediateOutputStreamを使用すること。
また、JDK 1.1 以前では RandomAccessFile が setLength を持たないため、 書庫データの後ろに他のデータがある場合でもファイルサイズを切り詰めることが出来ない。 この問題点は常にサイズ0の新しいファイルを開く事によって回避する事ができる。
LzssInputStream LZSS 圧縮されたデータを解凍しながら供給する入力ストリーム。
LzssOutputStream データを LZSS圧縮しながら 指定された PostLzssEncoder に出力する圧縮用出力ストリーム。
PatriciaTrieSearch PATRICIA Trie を使用した LzssSearchMethod の実装。
PostLh1Encoder -lh1- 圧縮用の PostLzssEncoder。
PostLh2Encoder -lh2- 圧縮用 PostLzssEncoder。
PostLh3Encoder -lh3- 圧縮用 PostLzssEncoder。
PostLh5Encoder -lh4-, -lh5-, -lh6-, -lh7- 圧縮用 PostLzssEncoder。
PostLz5Encoder -lz5- 圧縮用 PostLzssEncoder。
PostLzsEncoder -lzs- 圧縮用 PostLzssEncoder。
PreLh1Decoder -lh1- 解凍用の PreLzssDecoder。
PreLh2Decoder -lh2- 解凍用 PreLzssDecoder。
PreLh3Decoder -lh3- 解凍用の PreLzssDecoder。
PreLh5Decoder -lh4-, -lh5-, -lh6-, -lh7- 解凍用の PreLzssDecoder。
PreLz5Decoder -lz5- 解凍用 PreLzssDecoder。
PreLzsDecoder -lzs- 解凍用 PreLzssDecoder。
SimpleSearch 特別な検索機構を用いない LzssSearchMethod の最もシンプルな実装。
検索機構を用いないため、 他の検索機構を用いる実装と比べると遅いが、 メモリ消費量も非常に少ない。
StaticHuffman 静的ハフマン用ユーティリティ関数群を保持する。
ハフマン符号は最大16ビットに制限される。
TwoLevelHashSearch 二段階ハッシュと単方向連結リストを使って高速化された LzssSearchMethod。
定兼氏の論文 を参考にした。
 

Exception Summary
BadHuffmanTableException BlockHuffman.LenListToCodeList() 内で、 渡された LenList ( ハフマン符号長の表 )が不正なため、 ハフマン符号を生成できない事を示す。
 


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.