PushbackReader
日本語 | 押し戻し読者 |
英語 | pushback reader |
ふりがな | ぷっしゅばっくりーだー |
フリガナ | プッシュバックリーダー |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.io.PushbackReader。
ストリームクラス。Readerクラスのサブクラスであり、文字入力ストリームクラスである。
FilterReaderクラスのサブクラスに当たり、文字入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスは存在しない。
「プッシュバック」を行うことのできるクラス。
通常、文字入力ストリームクラスは「並べられた文字列から順にデータを取得する」が、PushbackReaderクラスは「次に取得する文字」の前に「先に返す文字」を用意しそちらを返すことができる。これを「プッシュバック」という。
PushbackReaderクラスは内部に「バッファ」、つまりbyte型配列のフィールドを持ち、プッシュバックを行うことでその文字をバッファに保存する。次に取得する際にはこのバッファから取り出し返す。バッファが空になるまではバッファから返し、バッファが空になれば再び入力元ストリームから返す。
PushbackReaderクラスのコンストラクタに他のReaderクラスのサブクラスを渡すことで、そのクラスを「入力元」として取得する。
PushbackReaderクラスのread()メソッドを用いて入力元のbyte型配列から各文字を取得する。
PushbackReaderクラスのunread()メソッドで、int型の値を「プッシュバック」する。プッシュバックされた値は次回read()メソッドを呼び出した際に返され、バッファから削除される。
バッファはスタック構造をしており、「後入れ先出し」、つまり「最後にプッシュバックしたものが先に取り出される」ことになる。
処理終了後はclose()メソッドを呼び終了処理を行う。
ストリームクラス。Readerクラスのサブクラスであり、文字入力ストリームクラスである。
FilterReaderクラスのサブクラスに当たり、文字入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスは存在しない。
「プッシュバック」を行うことのできるクラス。
通常、文字入力ストリームクラスは「並べられた文字列から順にデータを取得する」が、PushbackReaderクラスは「次に取得する文字」の前に「先に返す文字」を用意しそちらを返すことができる。これを「プッシュバック」という。
PushbackReaderクラスは内部に「バッファ」、つまりbyte型配列のフィールドを持ち、プッシュバックを行うことでその文字をバッファに保存する。次に取得する際にはこのバッファから取り出し返す。バッファが空になるまではバッファから返し、バッファが空になれば再び入力元ストリームから返す。
PushbackReaderクラスのコンストラクタに他のReaderクラスのサブクラスを渡すことで、そのクラスを「入力元」として取得する。
PushbackReaderクラスのread()メソッドを用いて入力元のbyte型配列から各文字を取得する。
PushbackReaderクラスのunread()メソッドで、int型の値を「プッシュバック」する。プッシュバックされた値は次回read()メソッドを呼び出した際に返され、バッファから削除される。
バッファはスタック構造をしており、「後入れ先出し」、つまり「最後にプッシュバックしたものが先に取り出される」ことになる。
処理終了後はclose()メソッドを呼び終了処理を行う。
// Sample.java
import java.io.StringReader;
import java.io.PushbackReader;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
StringReader stringReader = null;
PushbackReader pushbackReader = null;
try
{
// 対象とする文字列。
String source = "あい";
// StringReaderクラスを作ります。
stringReader = new StringReader( source );
// このクラスを対象とするPushbackReaderクラスを用意します。
pushbackReader = new PushbackReader( stringReader );
boolean isFirst = true;
while( true )
{
// 1バイト取得します。
int i = pushbackReader.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 最初だけ処理。
if( isFirst )
{
isFirst = false;
// 最初だけunread()メソッドを呼び出します。
// この値「か」がプッシュバックされます。
pushbackReader.unread( 'か' );
}
// 出力します。
System.out.println( (char)i );
}
// あ
// か
// い
// このように、プッシュバックされた「か」が、次の
// read()メソッド呼び出しで取得されます。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( pushbackReader != null )
{
pushbackReader.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
if( stringReader != null )
{
stringReader.close();
}
}
}
}
import java.io.StringReader;
import java.io.PushbackReader;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
StringReader stringReader = null;
PushbackReader pushbackReader = null;
try
{
// 対象とする文字列。
String source = "あい";
// StringReaderクラスを作ります。
stringReader = new StringReader( source );
// このクラスを対象とするPushbackReaderクラスを用意します。
pushbackReader = new PushbackReader( stringReader );
boolean isFirst = true;
while( true )
{
// 1バイト取得します。
int i = pushbackReader.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 最初だけ処理。
if( isFirst )
{
isFirst = false;
// 最初だけunread()メソッドを呼び出します。
// この値「か」がプッシュバックされます。
pushbackReader.unread( 'か' );
}
// 出力します。
System.out.println( (char)i );
}
// あ
// か
// い
// このように、プッシュバックされた「か」が、次の
// read()メソッド呼び出しで取得されます。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( pushbackReader != null )
{
pushbackReader.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
if( stringReader != null )
{
stringReader.close();
}
}
}
}
// Sample.java import java.io.StringReader; import java.io.PushbackReader; import java.io.IOException; public class Sample { public static void main( String[] args ) { StringReader stringReader = null; PushbackReader pushbackReader = null; try { // 対象とする文字列。 String source = "あい"; // StringReaderクラスを作ります。 stringReader = new StringReader( source ); // このクラスを対象とするPushbackReaderクラスを用意します。 pushbackReader = new PushbackReader( stringReader ); boolean isFirst = true; while( true ) { // 1バイト取得します。 int i = pushbackReader.read(); if( i == -1 ) { // -1が返されてきたら終わりです。 break; } // 最初だけ処理。 if( isFirst ) { isFirst = false; // 最初だけunread()メソッドを呼び出します。 // この値「か」がプッシュバックされます。 pushbackReader.unread( 'か' ); } // 出力します。 System.out.println( (char)i ); } // あ // か // い // このように、プッシュバックされた「か」が、次の // read()メソッド呼び出しで取得されます。 } catch( IOException e ) { // 読み込みに失敗した際に、read()メソッドが // IOException例外を投げます。 e.printStackTrace(); } finally { // 処理が終わったら、最後にclose()メソッドを呼んで // 後処理をします。また、これは必ず行うため、 // finally内で行います。 try { if( pushbackReader != null ) { pushbackReader.close(); } } catch( IOException e ) { // close()メソッドはIOExceptionがthrows指定されているので // 一応受け取ります。 e.printStackTrace(); } // 処理が終わったら、最後にclose()メソッドを呼んで // 後処理をします。また、これは必ず行うため、 // finally内で行います。 if( stringReader != null ) { stringReader.close(); } } } }