JavaA2Z

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

FilterOutputStream

日本語 濾過膜出力流れ
英語 filter output stream
ふりがな ふぃるたーあうとぷっとすとりーむ
フリガナ フィルターアウトプットストリーム

解説

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

参考サイト


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

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

// Sample.java
import java.io.OutputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.FilterOutputStream;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        ByteArrayOutputStream byteArrayOutputStream = null;
        NormalFilterOutputStream normalFilterOutputStream = null;
        PrintStream printStream = null;
        try
        {
            // 「出力先」のByteArrayInputStreamクラスを用意します。
            byteArrayOutputStream = new ByteArrayOutputStream();

            // このクラスを対象とするNormalFilterOutputStreamクラスを用意します。
            normalFilterOutputStream = new NormalFilterOutputStream( byteArrayOutputStream );

            // このクラスを対象とするPrintStreamクラスを用意します。
            printStream = new PrintStream( normalFilterOutputStream );

            // つまり、

            // PrintStream
            // ↓
            // NormalFilterOutputStream
            // ↓
            // ByteArrayOutputStream

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

            // 出力します。
            printStream.write( 1 );
            printStream.write( 2 );
            printStream.write( 3 );
            // NormalFilterOutputStream#write() : 1
            // NormalFilterOutputStream#write() : 2
            // NormalFilterOutputStream#write() : 3

            // 書き込まれたバイトデータをbyte型配列として取得します。
            byte[] bytes = byteArrayOutputStream.toByteArray();
            forint iF1 = 0; iF1 < bytes.length; ++iF1 )
            {
                // 出力します。
                System.out.println( "0x" + Integer.toHexString( bytes[iF1] ) + " ( " + bytes[iF1] + " )" );
            }
            // 0x1 ( 1 )
            // 0x2 ( 2 )
            // 0x3 ( 3 )

            // このように、printStreamのwrite()メソッドを呼ぶと、
            // normalFilterOutputStreamのwrite()メソッドを呼び出し、さらに
            // byteArrayOutputStreamのwrite()メソッドを呼び出します。
            // つまりバイト出力ストリームが連結して「チェーン」になった
            // というわけです。
        }
        finally
        {
            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            if( printStream != null )
            {
                printStream.close();
            }

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

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

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

    /**
    *   write()メソッド。
    *   このクラスを利用するバイト出力ストリームクラスの
    *   write()メソッドから呼び出されます。
    */
    public void write( int b ) throws IOException
    {
        // スーパークラスであるFilterOutputStreamクラスの
        // outフィールドに「出力先」のOutputStreamクラスが
        // 入っているので、そのwrite()メソッドを呼び出します。
        out.write( b );
        System.out.println( "NormalFilterOutputStream#write() : " + b );
    }
}
// Sample.java
import java.io.OutputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.FilterOutputStream;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        ByteArrayOutputStream byteArrayOutputStream = null;
        NormalFilterOutputStream normalFilterOutputStream = null;
        PrintStream printStream = null;
        try
        {
            // 「出力先」のByteArrayInputStreamクラスを用意します。
            byteArrayOutputStream = new ByteArrayOutputStream();

            // このクラスを対象とするNormalFilterOutputStreamクラスを用意します。
            normalFilterOutputStream = new NormalFilterOutputStream( byteArrayOutputStream );

            // このクラスを対象とするPrintStreamクラスを用意します。
            printStream = new PrintStream( normalFilterOutputStream );

            // つまり、

            // PrintStream
            // ↓
            // NormalFilterOutputStream
            // ↓
            // ByteArrayOutputStream

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

            // 出力します。
            printStream.write( 1 );
            printStream.write( 2 );
            printStream.write( 3 );
            // NormalFilterOutputStream#write() : 1
            // NormalFilterOutputStream#write() : 2
            // NormalFilterOutputStream#write() : 3

            // 書き込まれたバイトデータをbyte型配列として取得します。
            byte[] bytes = byteArrayOutputStream.toByteArray();
            for( int iF1 = 0; iF1 < bytes.length; ++iF1 )
            {
                // 出力します。
                System.out.println( "0x" + Integer.toHexString( bytes[iF1] ) + " ( " + bytes[iF1] + " )" );
            }
            // 0x1 ( 1 )
            // 0x2 ( 2 )
            // 0x3 ( 3 )

            // このように、printStreamのwrite()メソッドを呼ぶと、
            // normalFilterOutputStreamのwrite()メソッドを呼び出し、さらに
            // byteArrayOutputStreamのwrite()メソッドを呼び出します。
            // つまりバイト出力ストリームが連結して「チェーン」になった
            // というわけです。
        }
        finally
        {
            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            if( printStream != null )
            {
                printStream.close();
            }

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

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

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

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

この単語を含むページ

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

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

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