JavaA2Z

KAB-studio > プログラミング > JavaA2Z > PushbackReaderとは

PushbackReader

日本語 押し戻し読者
英語 pushback reader
ふりがな ぷっしゅばっくりーだー
フリガナ プッシュバックリーダー

解説

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.io.PushbackReader。
ストリームクラスReaderクラスサブクラスであり、文字入力ストリームクラスである。
FilterReaderクラスサブクラスに当たり、文字入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスは存在しない。
 
「プッシュバック」をうことのできるクラス
通常、文字入力ストリームクラスは「並べられた文字列から順にデータを取得する」が、PushbackReaderクラスは「次に取得する文字」の前に「先に返す文字」を用意しそちらを返すことができる。これを「プッシュバック」という。
PushbackReaderクラスは内部に「バッファ」、つまりbyte配列フィールドを持ち、プッシュバックをうことでその文字バッファに保存する。次に取得する際にはこのバッファから取り出し返す。バッファが空になるまではバッファから返し、バッファが空になれば再び入力元ストリームから返す。
 
PushbackReaderクラスコンストラクタに他のReaderクラスサブクラスを渡すことで、そのクラスを「入力元」として取得する。
PushbackReaderクラスのread()メソッドを用いて入力元のbyte配列から各文字を取得する。
PushbackReaderクラスのunread()メソッドで、intの値を「プッシュバック」する。プッシュバックされた値は次回read()メソッド呼び出した際に返され、バッファから削除される。
バッファスタック構造をしており、「後入れ先出し」、つまり「最後にプッシュバックしたものが先に取り出される」ことになる。
処理終了後はclose()メソッドを呼び終了処理をう。

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

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

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/11/15
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。