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();
}
}
}
}




