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