JavaA2Z

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

OutputStream

日本語 出力流れ
英語 output stream
ふりがな あうとぷっとすとりーむ
フリガナ アウトプットストリーム

解説

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.io.OutputStream。
ストリームクラス。全てのバイト出力ストリームクラススーパークラス
バイト出力ストリームクラスの中では「出力先」に位置する。
対になる入力側のクラスInputStreamクラスである。
 
全てのバイト出力ストリームクラススーパークラス
言い換えると、OutputStreamクラスサブクラスバイト出力ストリームクラスである、ということになる。
そういったスーパークラスとしての役目だけ持つため、このクラスを直接使用することはない。このクラスサブクラスを使用するか、もしくはサブクラスを作成して使用する。
そもそも抽象クラスであるため、インスタンスを作成することはできない。
基本的には、「出力先」となるクラスはこのOutputStreamクラスサブクラスとし、「中継ぎ」となるクラスはFilterutputStreamクラスサブクラスとする。
 
OutputStreamクラスサブクラスを作成する場合、まず「本当の出力先」を用意する。「本当の出力先」は、byte配列であったり、ファイルであったり、ソケットであったりする。そういった「一に並べられたbyteデータ」を「本当の出力先」とする。
他のバイト出力ストリームクラスを「出力先」としてもいいが、それであればOutputStreamクラスではなくFileOutputStreamクラスサブクラスとした方がいいだろう。
 
OutputStreamクラス抽象クラスであり、write()メソッド抽象メソッドであるため、サブクラスは必ずwrite()メソッドオーバーライドする必要がある。
write()メソッドでは、「本当の出力先」へ1バイト出力するよう実装する。引数に渡されたintのデータは、「バイトデータとしては同じ」になるようbyteキャストしてから出力する。つまり、渡された値がintの255(0x000000FF)であれば、これをbyte-1(0xFF)に変換して出力する。write()メソッドはあくまで「バイトデータ」を出力するメソッドだからである。
 
OutputStreamクラスのその他のメソッドも、必要であればオーバーライドする。
特にclose()メソッドは「終了処理」をメソッドであり、ファイルソケットといった、最後に「閉じる」処理が必要な「本当の出力先」の場合には必ずclose()メソッドオーバーライドし、使用時にはfinally呼び出すようにする。

参考サイト


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

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

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

public class Sample
{
    public static void main( String[] args )
    {
        NormalOutputStream normalOutputStream = null;
        PrintStream printStream = null;
        try
        {
            // NormalOutputStreamクラスを作ります。
            // 本当の「入力元」はないので、単独で作ります。
            normalOutputStream = new NormalOutputStream();

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

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

            // このように、printStreamのwrite()メソッドを呼ぶと、
            // normalOutputStreamのwrite()メソッドを呼び出します。
        }
        finally
        {
            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            if( printStream != null )
            {
                printStream.close();
            }

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

/**
*   NormalOutputStreamクラス。
*   OutputStreamクラスのサブクラスです。
*/
class NormalOutputStream extends OutputStream
{
    /**
    *   write()メソッド。
    *   このクラスを利用するバイト入力ストリームクラスの
    *   write()メソッドから呼び出されます。
    */
    public void write( int b ) throws IOException
    {
        System.out.println( "NormalOutputStream#write() : " + b );
    }
}
// Sample.java
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        NormalOutputStream normalOutputStream = null;
        PrintStream printStream = null;
        try
        {
            // NormalOutputStreamクラスを作ります。
            // 本当の「入力元」はないので、単独で作ります。
            normalOutputStream = new NormalOutputStream();

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

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

            // このように、printStreamのwrite()メソッドを呼ぶと、
            // normalOutputStreamのwrite()メソッドを呼び出します。
        }
        finally
        {
            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            if( printStream != null )
            {
                printStream.close();
            }

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

/**
*   NormalOutputStreamクラス。
*   OutputStreamクラスのサブクラスです。
*/
class NormalOutputStream extends OutputStream
{
    /**
    *   write()メソッド。
    *   このクラスを利用するバイト入力ストリームクラスの
    *   write()メソッドから呼び出されます。
    */
    public void write( int b ) throws IOException
    {
        System.out.println( "NormalOutputStream#write() : " + b );
    }
}

この単語を含むページ

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