com.jblend.io
クラス InflateInputStream

java.lang.Object
  |
  +--java.io.InputStream
        |
        +--com.jblend.io.InflateInputStream

public final class InflateInputStream
extends java.io.InputStream

InflateInputStreamクラスはdeflate形式で圧縮されたデータストリームに対して展開し、元のデータに復元する機能を提供します。InflateInputStreamはInputStreamのサブクラスです。

InflateInputStream がオーバーライドしていないInputStream のメソッドの振る舞いは、InputStreamのデフォルト動作であり、表1のようになります。

表1. InflateInputStreamがオーバーライドしていないメソッドの振る舞い
メソッド 処理
int available() 0を返す
void mark(int readlimit) 何もしない
boolean markSupported() falseを返す
void reset() IOException例外を発生するのみ
long skip(long n) 指定されたバイト数分、あるいはストリームの終端に達するまでinflateデータを読み飛ばす

InflateInputStreamクラスを使用するサンプルコード

以下に、HttpConnectionで読み込んだコンテンツがdeflate圧縮されていたときに、InflateInputStreamを使用して展開したデータを取り出すサンプルコードを示します。
   
   // InflateInputStreamを使ったサンプルコード
   // httpで通信し、Content-EncodingがdeflateならInflateInputStreamを使う
   // 読み込みのサンプルとして、バッファ一括read()を使用している

   private byte[] sampleInflateHttpData( String url ) throws IOException {
       HttpConnection c  = null;
       InputStream    is = null;

       try {
           c = (HttpConnection)Connector.open( url );
           String encoding = c.getEncoding();
           if ( ( encoding != null ) &&  encoding.equals( "deflate" ) ) {
               //コンテンツがdeflate圧縮されていたらInflateInputStreamを生成
               is = new InflateInputStream( c.openInputStream() );
           } else {
               is = c.openInputStream();
           }
           ByteArrayOutputStream byteArr = new ByteArrayOutputStream();  // 展開後のデータを格納
           byte[] b = new byte[ 256 ];
           int len;
           while ( ( len = is.read( b ) ) >= 0 ) {                       //infalte展開データをバッファに読み込み
               byteArr.write( b, 0, len );                               //出力ストリームに書き出す
           }
           return byteArr.toByteArray();                                 //出力ストリームに書き出したデータをバイト配列に格納する
       }
       finally {
           if ( is != null ) {
               try { is.close(); } catch ( IOException e ) { }           //InputInflateStreamをクローズ
           }
           if ( c != null ) {
               try { c.close(); } catch ( IOException e ) { }            //HttpConnectionをクローズ
           }
       }
   }


コンストラクタの概要
InflateInputStream(java.io.InputStream in)
          InflateInputStreamオブジェクトを生成します。
 
メソッドの概要
 void close()
          ストリームを閉じます。
 int read()
          inflate 展開後のデータを 1 バイト読み込み、返します。
 int read(byte[] b)
          inflate 展開後のデータを、指定されたバッファに読み出します。
 int read(byte[] b, int off, int len)
          inflate 展開後のデータを、指定されたバッファに、指定されたオフセットから 最大指定された長さだけ読み込みます。
 
クラス java.io.InputStream から継承したメソッド
available, mark, markSupported, reset, skip
 
クラス java.lang.Object から継承したメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

InflateInputStream

public InflateInputStream(java.io.InputStream in)
InflateInputStreamオブジェクトを生成します。
パラメータ:
in - deflateされたデータを取得するストリーム
メソッドの詳細

read

public int read()
         throws java.io.IOException
inflate 展開後のデータを 1 バイト読み込み、返します。
オーバーライド:
クラス java.io.InputStream 内の read
戻り値:
読み込んだデータ。 データがストリームの終端に達した場合は -1 を返す。
例外:
java.io.IOException - 入出力エラーが発生した場合

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
inflate 展開後のデータを、指定されたバッファに、指定されたオフセットから 最大指定された長さだけ読み込みます。

内部でバッファリングしているデータのサイズとパフォーマンスの関係上、 引数で指定したバッファを必ずしも満たすとは限りません。 残りデータがまだ十分にあるにもかかわらず、読み込みサイズ(len-offバイト)よりも 少ないサイズしかデータを読み込まない場合があります。 データがストリームの終端に達した場合は -1 を返すので、展開したデータをすべて取得したい場合は、 このメソッドが -1 を返すまで繰り返し呼び出しを行ってください。

オーバーライド:
クラス java.io.InputStream 内の read
パラメータ:
b - データの読み込み先のバッファ
off - データが書き込まれる配列bの開始オフセット
len - 読み込む最大バイト数
戻り値:
読み込んだデータのバイト数を返す。 データがストリームの終端に達した場合は -1 を返す。
例外:
java.io.IOException - 入出力エラーが発生した場合

read

public int read(byte[] b)
         throws java.io.IOException
inflate 展開後のデータを、指定されたバッファに読み出します。 read( b, 0, b.length ) と同じ意味を持ちます。

内部でバッファリングしているデータのサイズとパフォーマンスの関係上、 引数で指定したバッファを必ずしも満たすとは限りません。 残りデータがまだ十分にあるにもかかわらず、読み込みサイズ(len-offバイト)よりも 少ないサイズしかデータを読み込まない場合があります。 データがストリームの終端に達した場合は -1 を返すので、展開したデータをすべて取得したい場合は、 このメソッドが -1 を返すまで繰り返し呼び出しを行ってください。

オーバーライド:
クラス java.io.InputStream 内の read
パラメータ:
b - データの読み込み先のバッファ
戻り値:
読み込んだデータのバイト数を返す。 データがストリームの終端に達した場合は -1 を返す。
例外:
java.io.IOException - 入出力エラーが発生した場合

close

public void close()
           throws java.io.IOException
ストリームを閉じます。
オーバーライド:
クラス java.io.InputStream 内の close
例外:
java.io.IOException - 入出力エラーが発生した場合