JavaA2Z

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

BufferedOutputStream

日本語 緩衝地化出力流れ
英語 buffered output stream
ふりがな ばっふぁーどあうとぷっとすとりーむ
フリガナ バッファードアウトプットストリーム

解説

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.io.BufferedOutputStream。
ストリームクラスOutputStreamクラスサブクラスであり、バイト出力ストリームクラスである。
FilterOutputStreamクラスサブクラスに当たり、バイト出力ストリームクラスの中では「中継ぎ」に位置する。
対になる入力側のクラスBufferedInputStreamクラスである。
 
バイトストリームを数バイト「まとめて」出力するためのバイト出力ストリームクラス
通常、write()メソッド呼び出すごとに1バイト単位で出力するが、出力先がファイルやネットワークの場合、数バイトまとめて出力した方が処理が早まる可能性がある。
そこで、write()メソッドを呼んでもすぐには出力せず、渡されたバイトデータを「バッファ」に保存しておき、貯まった際や任意のタイミングでまとめて出力するのがこのクラスの役目である。
  
BufferedOutputStreamクラスコンストラクタに他のOutputStreamクラスサブクラスを渡すことで、そのクラスを「出力先」として出力する。
BufferedOutputStreamクラスのwrite()メソッドで出力をう。ただし、出力先にはすぐさま出力せず、渡されたバイトデータを「バッファ」というBufferedOutputStreamクラス内のフィールドに格納しておく。
そして、flush()メソッドが呼ばれた時や、バッファがいっぱいになった時、close()メソッドが呼ばれた時にまとめてバッファの中身を出力先に出力する。
特に、flush()メソッド呼び出しを「フラッシュ」と言い、まとめて出力することを指す。このフラッシュえることが、BufferedOutputStreamクラスのメリットである。
処理終了後はclose()メソッドを呼び終了処理をう。

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

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

// Sample.java
import java.io.ByteArrayOutputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        ByteArrayOutputStream byteArrayOutputStream = null;
        BufferedOutputStream bufferedOutputStream = null;
        try
        {
            // ByteArrayOutputStreamクラスを用意します。
            byteArrayOutputStream = new ByteArrayOutputStream();

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

            // バイトデータを書き込みます。
            bufferedOutputStream.write( 0x01 );
            bufferedOutputStream.write( 0x02 );
            bufferedOutputStream.write( 0x03 );

            // 書き込まれたバイトデータをbyte型配列として取得します。
            byte[] bytes = byteArrayOutputStream.toByteArray();
            // ところが、この段階ではまだバイトデータが書き込まれていません。
            System.out.println( bytes.length );
            // 0

            // これは、バッファリングを行うためです。
            // つまり、まとめて出力するために貯えているわけです。

            // というわけで、まとめて出力します。
            // 出力はBufferedOutputStreamクラスのflush()メソッドで行います。
            bufferedOutputStream.flush();

            // これで出力されました。
            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 )

            // このように、バイトデータを任意のタイミングでまとめて
            // 出力するのがBufferedOutputStreamクラスの目的です。
        }
        catch( IOException e )
        {
            // 読み込みに失敗した際に、write()メソッドが
            // IOException例外を投げます。
            e.printStackTrace();
        }
        finally
        {
            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( bufferedOutputStream != null )
                {
                    bufferedOutputStream.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();
            }
        }
    }
}
// Sample.java
import java.io.ByteArrayOutputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        ByteArrayOutputStream byteArrayOutputStream = null;
        BufferedOutputStream bufferedOutputStream = null;
        try
        {
            // ByteArrayOutputStreamクラスを用意します。
            byteArrayOutputStream = new ByteArrayOutputStream();

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

            // バイトデータを書き込みます。
            bufferedOutputStream.write( 0x01 );
            bufferedOutputStream.write( 0x02 );
            bufferedOutputStream.write( 0x03 );

            // 書き込まれたバイトデータをbyte型配列として取得します。
            byte[] bytes = byteArrayOutputStream.toByteArray();
            // ところが、この段階ではまだバイトデータが書き込まれていません。
            System.out.println( bytes.length );
            // 0

            // これは、バッファリングを行うためです。
            // つまり、まとめて出力するために貯えているわけです。

            // というわけで、まとめて出力します。
            // 出力はBufferedOutputStreamクラスのflush()メソッドで行います。
            bufferedOutputStream.flush();

            // これで出力されました。
            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 )

            // このように、バイトデータを任意のタイミングでまとめて
            // 出力するのがBufferedOutputStreamクラスの目的です。
        }
        catch( IOException e )
        {
            // 読み込みに失敗した際に、write()メソッドが
            // IOException例外を投げます。
            e.printStackTrace();
        }
        finally
        {
            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( bufferedOutputStream != null )
                {
                    bufferedOutputStream.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();
            }
        }
    }
}

この単語を含むページ

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

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

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