PushbackInputStream
日本語 | 押し戻し入力流れ |
英語 | pushback input stream |
ふりがな | ぷっしゅばっくいんぷっとすとりーむ |
フリガナ | プッシュバックインプットストリーム |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.io.PushbackInputStream。
ストリームクラス。InputStreamクラスのサブクラスであり、バイト入力ストリームクラスである。
FilterInputStreamクラスのサブクラスに当たり、バイト入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスは存在しない。
「プッシュバック」を行うことのできるクラス。
通常、バイト入力ストリームクラスは「並べられたバイト列から順にデータを取得する」が、PushbackInputStreamクラスは「次に取得するバイト」の前に「先に返すバイト」を用意しそちらを返すことができる。これを「プッシュバック」という。
PushbackInputStreamクラスは内部に「バッファ」、つまりbyte型配列のフィールドを持ち、プッシュバックを行うことでそのバイトをバッファに保存する。次に取得する際にはこのバッファから取り出し返す。バッファが空になるまではバッファから返し、バッファが空になれば再び入力元ストリームから返す。
PushbackInputStreamクラスのコンストラクタに他のInputStreamクラスのサブクラスを渡すことで、そのクラスを「入力元」として取得する。
PushbackInputStreamクラスのread()メソッドを用いて入力元のbyte型配列から各バイトを取得する。
PushbackInputStreamクラスのunread()メソッドで、int型の値を「プッシュバック」する。プッシュバックされた値は次回read()メソッドを呼び出した際に返され、バッファから削除される。
バッファはスタック構造をしており、「後入れ先出し」、つまり「最後にプッシュバックしたものが先に取り出される」ことになる。
処理終了後はclose()メソッドを呼び終了処理を行う。
ストリームクラス。InputStreamクラスのサブクラスであり、バイト入力ストリームクラスである。
FilterInputStreamクラスのサブクラスに当たり、バイト入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスは存在しない。
「プッシュバック」を行うことのできるクラス。
通常、バイト入力ストリームクラスは「並べられたバイト列から順にデータを取得する」が、PushbackInputStreamクラスは「次に取得するバイト」の前に「先に返すバイト」を用意しそちらを返すことができる。これを「プッシュバック」という。
PushbackInputStreamクラスは内部に「バッファ」、つまりbyte型配列のフィールドを持ち、プッシュバックを行うことでそのバイトをバッファに保存する。次に取得する際にはこのバッファから取り出し返す。バッファが空になるまではバッファから返し、バッファが空になれば再び入力元ストリームから返す。
PushbackInputStreamクラスのコンストラクタに他のInputStreamクラスのサブクラスを渡すことで、そのクラスを「入力元」として取得する。
PushbackInputStreamクラスのread()メソッドを用いて入力元のbyte型配列から各バイトを取得する。
PushbackInputStreamクラスのunread()メソッドで、int型の値を「プッシュバック」する。プッシュバックされた値は次回read()メソッドを呼び出した際に返され、バッファから削除される。
バッファはスタック構造をしており、「後入れ先出し」、つまり「最後にプッシュバックしたものが先に取り出される」ことになる。
処理終了後はclose()メソッドを呼び終了処理を行う。
参考サイト
// Sample.java
import java.io.ByteArrayInputStream;
import java.io.PushbackInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
ByteArrayInputStream byteArrayInputStream = null;
PushbackInputStream pushbackInputStream = null;
try
{
// 処理対象のバイト配列1。
byte[] bytes = new byte[]{ 1, 2, 3 };
// そのバイト配列を読み込み対象とする
// ByteArrayInputStreamクラス。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// このクラスを対象とするPushbackInputStreamクラスを用意します。
pushbackInputStream = new PushbackInputStream( byteArrayInputStream );
boolean isFirst = true;
while( true )
{
// 1バイト取得します。
int i = pushbackInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 最初だけ処理。
if( isFirst )
{
isFirst = false;
// 最初だけunread()メソッドを呼び出します。
// この値「10」がプッシュバックされます。
pushbackInputStream.unread( 10 );
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// 0x1 ( 1 )
// 0xa ( 10 )
// 0x2 ( 2 )
// 0x3 ( 3 )
// このように、プッシュバックされた「10」が、次の
// read()メソッド呼び出しで取得されます。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( pushbackInputStream != null )
{
pushbackInputStream.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.PushbackInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
ByteArrayInputStream byteArrayInputStream = null;
PushbackInputStream pushbackInputStream = null;
try
{
// 処理対象のバイト配列1。
byte[] bytes = new byte[]{ 1, 2, 3 };
// そのバイト配列を読み込み対象とする
// ByteArrayInputStreamクラス。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// このクラスを対象とするPushbackInputStreamクラスを用意します。
pushbackInputStream = new PushbackInputStream( byteArrayInputStream );
boolean isFirst = true;
while( true )
{
// 1バイト取得します。
int i = pushbackInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 最初だけ処理。
if( isFirst )
{
isFirst = false;
// 最初だけunread()メソッドを呼び出します。
// この値「10」がプッシュバックされます。
pushbackInputStream.unread( 10 );
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// 0x1 ( 1 )
// 0xa ( 10 )
// 0x2 ( 2 )
// 0x3 ( 3 )
// このように、プッシュバックされた「10」が、次の
// read()メソッド呼び出しで取得されます。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( pushbackInputStream != null )
{
pushbackInputStream.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.PushbackInputStream; import java.io.IOException; public class Sample { public static void main( String[] args ) { ByteArrayInputStream byteArrayInputStream = null; PushbackInputStream pushbackInputStream = null; try { // 処理対象のバイト配列1。 byte[] bytes = new byte[]{ 1, 2, 3 }; // そのバイト配列を読み込み対象とする // ByteArrayInputStreamクラス。 byteArrayInputStream = new ByteArrayInputStream( bytes ); // このクラスを対象とするPushbackInputStreamクラスを用意します。 pushbackInputStream = new PushbackInputStream( byteArrayInputStream ); boolean isFirst = true; while( true ) { // 1バイト取得します。 int i = pushbackInputStream.read(); if( i == -1 ) { // -1が返されてきたら終わりです。 break; } // 最初だけ処理。 if( isFirst ) { isFirst = false; // 最初だけunread()メソッドを呼び出します。 // この値「10」がプッシュバックされます。 pushbackInputStream.unread( 10 ); } // 出力します。 System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" ); } // 0x1 ( 1 ) // 0xa ( 10 ) // 0x2 ( 2 ) // 0x3 ( 3 ) // このように、プッシュバックされた「10」が、次の // read()メソッド呼び出しで取得されます。 } catch( IOException e ) { // 読み込みに失敗した際に、read()メソッドが // IOException例外を投げます。 e.printStackTrace(); } finally { // 処理が終わったら、最後にclose()メソッドを呼んで // 後処理をします。また、これは必ず行うため、 // finally内で行います。 try { if( pushbackInputStream != null ) { pushbackInputStream.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(); } } } }