JavaA2Z

KAB-studio > プログラミング > JavaA2Z > FilterInputStreamとは

FilterInputStream

日本語 濾過膜入力流れ
英語 filter input stream
ふりがな ふぃるたーいんぷっとすとりーむ
フリガナ フィルターインプットストリーム

解説

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.io.FilterInputStream。
ストリームクラスInputStreamクラスサブクラスであり、バイト入力ストリームクラスである。
バイト入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスFilterOutputStreamクラスである。
 
バイト入力ストリームの「中継ぎ」クラススーパークラス
「入力元」→「中継ぎ」→「取得用」という連携の中で、「入力元」から取得したバイトデータを書き換えたり、「取得用」からの取得指示に対して特殊な方法で取得する、といった「中間位置での立ち回り」をクラスの、スーパークラスとなるクラスである。
そういったスーパークラスとしての役目だけ持つため、このクラスのみを単独で使用することはない。このクラスサブクラスを使用するか、もしくはサブクラスを作成して使用する。
サブクラスにはBufferedInputStreamクラスDataInputStreamクラスPushbackInputStreamクラス等のクラスがある。
 
FilterInputStreamクラスサブクラスを作成する場合、まずコンストラクタInputStreamクラス引数に受け取り、FilterInputStreamクラスコンストラクタに渡す。そうすることで、FilterInputStreamクラスのinフィールドにこのInputStreamクラスが格納される。このInputStreamクラスは「入力元」に当たる。
その後、任意の(可能なら全ての)read()メソッドオーバーロードする。基本的には、inフィールドのread()メソッド呼び出して「入力元」からバイトストリームを取得し、そのまま返す。ただし、このサブクラスいたい機能によっては、この取得したバイトストリームを加工したり、別のバイトストリームから値を返すようにする。。
read()メソッドは、このサブクラスを他の「中継ぎ」クラスもしくは「取得用」クラスに渡した場合、そのread()メソッドから呼び出される。
つまり、「取得用」→「中継ぎ」→「入力元」の順でread()メソッド呼び出していき、その逆方向に値を返していく。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.io.PushbackInputStream;
import java.io.FilterInputStream;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        ByteArrayInputStream byteArrayInputStream = null;
        NormalFilterInputStream normalFilterInputStream = null;
        PushbackInputStream pushbackInputStream = null;
        try
        {
            // 処理対象のバイト配列1。
            byte[] bytes = new byte[]{ 1, 2, 3 };
            // そのバイト配列を読み込み対象とする
            // ByteArrayInputStreamクラス。
            byteArrayInputStream = new ByteArrayInputStream( bytes );

            // このクラスを対象とするNormalFilterInputStreamクラスを用意します。
            normalFilterInputStream = new NormalFilterInputStream( byteArrayInputStream );

            // このクラスを対象とするPushbackInputStreamクラスを用意します。
            pushbackInputStream = new PushbackInputStream( normalFilterInputStream );

            // つまり、

            // ByteArrayInputStream
            // ↓
            // NormalFilterInputStream
            // ↓
            // PushbackInputStream

            // という形で、バイト入力ストリームクラスが連結したことになります。

            while( true )
            {
                // 1バイト取得します。
                int i = pushbackInputStream.read();
                if( i == -1 )
                {
                    // -1が返されてきたら終わりです。
                    break;
                }

                // 出力します。
                System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
            }
            // NormalFilterInputStream#read() : 1
            // 0x1 ( 1 )
            // NormalFilterInputStream#read() : 2
            // 0x2 ( 2 )
            // NormalFilterInputStream#read() : 3
            // 0x3 ( 3 )
            // NormalFilterInputStream#read() : -1

            // このように、pushbackInputStreamのread()メソッドを呼ぶと、
            // normalFilterInputStreamのread()メソッドを呼び出します。
            // つまりバイト入力ストリームが連結して「チェーン」になった
            // というわけです。
        }
        catch( IOException e )
        {
            // 読み込みに失敗した際に、read()メソッドが
            // IOException例外を投げます。
            e.printStackTrace();
        }
        finally
        {
            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( pushbackInputStream != null )
                {
                    pushbackInputStream.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( normalFilterInputStream != null )
                {
                    normalFilterInputStream.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( byteArrayInputStream != null )
                {
                    byteArrayInputStream.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }
        }
    }
}

/**
*   NormalFilterInputStreamクラス。
*   FilterInputStreamクラスのサブクラスです。
*/
class NormalFilterInputStream extends FilterInputStream
{
    /**
    *   コンストラクタ。
    *   引数に「入力元」となるバイト入力ストリームクラスを受け取ります。
    *   「中継ぎ」に当たるので、InputStreamクラスを引数に受け取ります。
    */
    public NormalFilterInputStream( InputStream in )
    {
        // 処理はスーパークラスが受け持ってくれるので、
        // スーパークラスに渡します。
        super( in );
    }

    /**
    *   read()メソッド。
    *   このクラスを利用するバイト入力ストリームクラスの
    *   read()メソッドから呼び出されます。
    */
    public int read() throws IOException
    {
        // スーパークラスであるFilterInputStreamクラスの
        // inフィールドに「入力元」のInputStreamクラスが
        // 入っているので、そのread()メソッドを呼び出します。
        int i = in.read();
        System.out.println( "NormalFilterInputStream#read() : " + i );
        return i;
    }
}
// Sample.java
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.io.PushbackInputStream;
import java.io.FilterInputStream;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        ByteArrayInputStream byteArrayInputStream = null;
        NormalFilterInputStream normalFilterInputStream = null;
        PushbackInputStream pushbackInputStream = null;
        try
        {
            // 処理対象のバイト配列1。
            byte[] bytes = new byte[]{ 1, 2, 3 };
            // そのバイト配列を読み込み対象とする
            // ByteArrayInputStreamクラス。
            byteArrayInputStream = new ByteArrayInputStream( bytes );

            // このクラスを対象とするNormalFilterInputStreamクラスを用意します。
            normalFilterInputStream = new NormalFilterInputStream( byteArrayInputStream );

            // このクラスを対象とするPushbackInputStreamクラスを用意します。
            pushbackInputStream = new PushbackInputStream( normalFilterInputStream );

            // つまり、

            // ByteArrayInputStream
            // ↓
            // NormalFilterInputStream
            // ↓
            // PushbackInputStream

            // という形で、バイト入力ストリームクラスが連結したことになります。

            while( true )
            {
                // 1バイト取得します。
                int i = pushbackInputStream.read();
                if( i == -1 )
                {
                    // -1が返されてきたら終わりです。
                    break;
                }

                // 出力します。
                System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
            }
            // NormalFilterInputStream#read() : 1
            // 0x1 ( 1 )
            // NormalFilterInputStream#read() : 2
            // 0x2 ( 2 )
            // NormalFilterInputStream#read() : 3
            // 0x3 ( 3 )
            // NormalFilterInputStream#read() : -1

            // このように、pushbackInputStreamのread()メソッドを呼ぶと、
            // normalFilterInputStreamのread()メソッドを呼び出します。
            // つまりバイト入力ストリームが連結して「チェーン」になった
            // というわけです。
        }
        catch( IOException e )
        {
            // 読み込みに失敗した際に、read()メソッドが
            // IOException例外を投げます。
            e.printStackTrace();
        }
        finally
        {
            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( pushbackInputStream != null )
                {
                    pushbackInputStream.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( normalFilterInputStream != null )
                {
                    normalFilterInputStream.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( byteArrayInputStream != null )
                {
                    byteArrayInputStream.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }
        }
    }
}

/**
*   NormalFilterInputStreamクラス。
*   FilterInputStreamクラスのサブクラスです。
*/
class NormalFilterInputStream extends FilterInputStream
{
    /**
    *   コンストラクタ。
    *   引数に「入力元」となるバイト入力ストリームクラスを受け取ります。
    *   「中継ぎ」に当たるので、InputStreamクラスを引数に受け取ります。
    */
    public NormalFilterInputStream( InputStream in )
    {
        // 処理はスーパークラスが受け持ってくれるので、
        // スーパークラスに渡します。
        super( in );
    }

    /**
    *   read()メソッド。
    *   このクラスを利用するバイト入力ストリームクラスの
    *   read()メソッドから呼び出されます。
    */
    public int read() throws IOException
    {
        // スーパークラスであるFilterInputStreamクラスの
        // inフィールドに「入力元」のInputStreamクラスが
        // 入っているので、そのread()メソッドを呼び出します。
        int i = in.read();
        System.out.println( "NormalFilterInputStream#read() : " + i );
        return i;
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/11/18
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。