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




