BufferedInputStream
日本語 | 緩衝地化入力流れ |
英語 | buffered input stream |
ふりがな | ばっふぁーどいんぷっとすとりーむ |
フリガナ | バッファードインプットストリーム |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.io.BufferedInputStream。
ストリームクラス。InputStreamクラスのサブクラスであり、バイト入力ストリームクラスである。
FilterInputStreamクラスのサブクラスに当たり、バイト入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスはBufferedOutputStreamクラスである。
バイトストリームを数バイト「まとめて」取得するためのバイト入力ストリームクラス。
通常、read()メソッドを呼び出すごとに1バイト単位で取得するが、ネットワーク環境等によっては数バイトをまとめて取得した方が処理が早まる可能性がある。
そこで、1回のread()メソッドで数バイトをあらかじめ取得し「バッファ」に保存することで、その後の取得をバッファから返し処理速度の向上を図る、のがこのクラスの役目である。
BufferedInputStreamクラスのコンストラクタに他のInputStreamクラスのサブクラスを渡すことで、そのクラスを「入力元」として取得する。
BufferedInputStreamクラスのread()メソッドを用いて入力元のbyte型配列から各バイトを取得する。その際、コンストラクタに渡された「入力元」のread()メソッドを呼び出し、数バイトを取得してフィールドに格納する。それ以降のread()メソッドではそのフィールドから返す。
処理終了後はclose()メソッドを呼び終了処理を行う。
ストリームクラス。InputStreamクラスのサブクラスであり、バイト入力ストリームクラスである。
FilterInputStreamクラスのサブクラスに当たり、バイト入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスはBufferedOutputStreamクラスである。
バイトストリームを数バイト「まとめて」取得するためのバイト入力ストリームクラス。
通常、read()メソッドを呼び出すごとに1バイト単位で取得するが、ネットワーク環境等によっては数バイトをまとめて取得した方が処理が早まる可能性がある。
そこで、1回のread()メソッドで数バイトをあらかじめ取得し「バッファ」に保存することで、その後の取得をバッファから返し処理速度の向上を図る、のがこのクラスの役目である。
BufferedInputStreamクラスのコンストラクタに他のInputStreamクラスのサブクラスを渡すことで、そのクラスを「入力元」として取得する。
BufferedInputStreamクラスのread()メソッドを用いて入力元のbyte型配列から各バイトを取得する。その際、コンストラクタに渡された「入力元」のread()メソッドを呼び出し、数バイトを取得してフィールドに格納する。それ以降のread()メソッドではそのフィールドから返す。
処理終了後はclose()メソッドを呼び終了処理を行う。
// Sample.java
import java.io.ByteArrayInputStream;
import java.io.BufferedInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
ByteArrayInputStream byteArrayInputStream = null;
BufferedInputStream bufferedInputStream = null;
try
{
// 処理対象のバイト配列1。
byte[] bytes = new byte[]{ 1, 2, 3 };
// そのバイト配列を読み込み対象とする
// ByteArrayInputStreamクラス。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// このクラスを対象とするBufferedInputStreamクラスを用意します。
bufferedInputStream = new BufferedInputStream( byteArrayInputStream );
boolean isFirst = true;
while( true )
{
// 1バイト取得します。
int i = bufferedInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 最初だけ処理。
if( isFirst )
{
isFirst = false;
// すでにこの段階でbytes配列からデータを全て
// 取得しているため、書き換えても出力結果に変化は
// ありません。
bytes[1] = 20;
bytes[2] = 30;
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// 0x1 ( 1 )
// 0x2 ( 2 )
// 0x3 ( 3 )
// このように、配列への修正は反映されていません。
// BufferedInputStreamクラスが、まとめて取得している
// からです。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( bufferedInputStream != null )
{
bufferedInputStream.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();
}
}
}
}
import java.io.ByteArrayInputStream;
import java.io.BufferedInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
ByteArrayInputStream byteArrayInputStream = null;
BufferedInputStream bufferedInputStream = null;
try
{
// 処理対象のバイト配列1。
byte[] bytes = new byte[]{ 1, 2, 3 };
// そのバイト配列を読み込み対象とする
// ByteArrayInputStreamクラス。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// このクラスを対象とするBufferedInputStreamクラスを用意します。
bufferedInputStream = new BufferedInputStream( byteArrayInputStream );
boolean isFirst = true;
while( true )
{
// 1バイト取得します。
int i = bufferedInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 最初だけ処理。
if( isFirst )
{
isFirst = false;
// すでにこの段階でbytes配列からデータを全て
// 取得しているため、書き換えても出力結果に変化は
// ありません。
bytes[1] = 20;
bytes[2] = 30;
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// 0x1 ( 1 )
// 0x2 ( 2 )
// 0x3 ( 3 )
// このように、配列への修正は反映されていません。
// BufferedInputStreamクラスが、まとめて取得している
// からです。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( bufferedInputStream != null )
{
bufferedInputStream.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();
}
}
}
}
// Sample.java import java.io.ByteArrayInputStream; import java.io.BufferedInputStream; import java.io.IOException; public class Sample { public static void main( String[] args ) { ByteArrayInputStream byteArrayInputStream = null; BufferedInputStream bufferedInputStream = null; try { // 処理対象のバイト配列1。 byte[] bytes = new byte[]{ 1, 2, 3 }; // そのバイト配列を読み込み対象とする // ByteArrayInputStreamクラス。 byteArrayInputStream = new ByteArrayInputStream( bytes ); // このクラスを対象とするBufferedInputStreamクラスを用意します。 bufferedInputStream = new BufferedInputStream( byteArrayInputStream ); boolean isFirst = true; while( true ) { // 1バイト取得します。 int i = bufferedInputStream.read(); if( i == -1 ) { // -1が返されてきたら終わりです。 break; } // 最初だけ処理。 if( isFirst ) { isFirst = false; // すでにこの段階でbytes配列からデータを全て // 取得しているため、書き換えても出力結果に変化は // ありません。 bytes[1] = 20; bytes[2] = 30; } // 出力します。 System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" ); } // 0x1 ( 1 ) // 0x2 ( 2 ) // 0x3 ( 3 ) // このように、配列への修正は反映されていません。 // BufferedInputStreamクラスが、まとめて取得している // からです。 } catch( IOException e ) { // 読み込みに失敗した際に、read()メソッドが // IOException例外を投げます。 e.printStackTrace(); } finally { // 処理が終わったら、最後にclose()メソッドを呼んで // 後処理をします。また、これは必ず行うため、 // finally内で行います。 try { if( bufferedInputStream != null ) { bufferedInputStream.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(); } } } }