JavaA2Z

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

BufferedReader

日本語 緩衝地化読者
英語 buffered reader
ふりがな ばっふぁーどりーだー
フリガナ バッファードリーダー

解説

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.io.BufferedReader。
ストリームクラスReaderクラスサブクラスであり、文字入力ストリームクラスである。
文字入力ストリームクラスの中では「中継ぎ」に位置する。
対になる出力側のクラスBufferedWriterクラスである。
 
文字ストリームを数文字「まとめて」取得するための文字入力ストリームクラス
通常、read()メソッド呼び出すごとに1文字単位で取得するが、ネットワーク環境等によっては数文字をまとめて取得した方が処理が早まる可能性がある。
そこで、1回のread()メソッドで数文字をあらかじめ取得し「バッファ」に保存することで、その後の取得をバッファから返し処理速度の向上を図る、のがこのクラスの役目である。
 
また、readLine()メソッド文字ストリームから「一ずつ」文字列を取得する。
その際、対象の文字ストリームが使用する改行文字に関わらず適切に一ずつ取得するため、改行文字を考慮する必要がない。
特にFileReaderクラスを使用してファイルを読み込む際に、ファイル改行文字を考慮する必要がなく、しかも適切にバッファリングがわれるというメリットもあるため、併用するといいだろう。
 
BufferedReaderクラスコンストラクタに他のReaderクラスサブクラスを渡すことで、そのクラスを「入力元」として取得する。
BufferedReaderクラスのread()メソッドを用いて入力元の文字列ストリームから各文字を取得する。その際、コンストラクタに渡された「入力元」のread()メソッド呼び出し、数文字を取得してフィールドに格納する。それ以降のread()メソッドではそのフィールドから返す。
処理終了後はclose()メソッドを呼び終了処理をう。

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

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

// Sample.java
import java.io.CharArrayReader;
import java.io.BufferedReader;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        CharArrayReader charArrayReader = null;
        BufferedReader bufferedReader = null;
        try
        {
            // 対象とする文字列。
            char[] chars = new char[]{ 'あ''い''う''え''お' };
            // そのバイト配列を読み込み対象とする
            // CharArrayReaderクラス。
            charArrayReader = new CharArrayReader( chars );

            // このクラスを対象とするBufferedReaderクラスを用意します。
            bufferedReader = new BufferedReader( charArrayReader );

            boolean isFirst = true;
            while( true )
            {
                // 1バイト取得します。
                int i = bufferedReader.read();
                // (bufferedReaderをcharArrayReaderにすると、
                // バッファリングされない例になります)
                if( i == -1 )
                {
                    // -1が返されてきたら終わりです。
                    break;
                }

                // 最初だけ処理。
                if( isFirst )
                {
                    isFirst = false;

                    // すでにこの段階でbytes配列からデータを全て
                    // 取得しているため、書き換えても出力結果に変化は
                    // ありません。
                    chars[1] = 'き';
                    chars[2] = 'く';
                }

                // 出力します。
                System.out.println( (char)i );
            }
            // あ
            // い
            // う
            // え
            // お

            // このように、配列への修正は反映されていません。
            // BufferedReaderクラスが、まとめて取得している
            // からです。
        }
        catch( IOException e )
        {
            // 読み込みに失敗した際に、read()メソッドが
            // IOException例外を投げます。
            e.printStackTrace();
        }
        finally
        {
            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( bufferedReader != null )
                {
                    bufferedReader.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            if( charArrayReader != null )
            {
                charArrayReader.close();
            }
        }
    }
}
// Sample.java
import java.io.CharArrayReader;
import java.io.BufferedReader;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        CharArrayReader charArrayReader = null;
        BufferedReader bufferedReader = null;
        try
        {
            // 対象とする文字列。
            char[] chars = new char[]{ 'あ', 'い', 'う', 'え', 'お' };
            // そのバイト配列を読み込み対象とする
            // CharArrayReaderクラス。
            charArrayReader = new CharArrayReader( chars );

            // このクラスを対象とするBufferedReaderクラスを用意します。
            bufferedReader = new BufferedReader( charArrayReader );

            boolean isFirst = true;
            while( true )
            {
                // 1バイト取得します。
                int i = bufferedReader.read();
                // (bufferedReaderをcharArrayReaderにすると、
                // バッファリングされない例になります)
                if( i == -1 )
                {
                    // -1が返されてきたら終わりです。
                    break;
                }

                // 最初だけ処理。
                if( isFirst )
                {
                    isFirst = false;

                    // すでにこの段階でbytes配列からデータを全て
                    // 取得しているため、書き換えても出力結果に変化は
                    // ありません。
                    chars[1] = 'き';
                    chars[2] = 'く';
                }

                // 出力します。
                System.out.println( (char)i );
            }
            // あ
            // い
            // う
            // え
            // お

            // このように、配列への修正は反映されていません。
            // BufferedReaderクラスが、まとめて取得している
            // からです。
        }
        catch( IOException e )
        {
            // 読み込みに失敗した際に、read()メソッドが
            // IOException例外を投げます。
            e.printStackTrace();
        }
        finally
        {
            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( bufferedReader != null )
                {
                    bufferedReader.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            if( charArrayReader != null )
            {
                charArrayReader.close();
            }
        }
    }
}

この単語を含むページ

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

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