JavaA2Z

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

PushbackInputStream

日本語 押し戻し入力流れ
英語 pushback input stream
ふりがな ぷっしゅばっくいんぷっとすとりーむ
フリガナ プッシュバックインプットストリーム

解説

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

参考サイト


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

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

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

この単語を含むページ

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

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

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

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