JavaのBufferedReaderの解説
JavaのBufferedReaderクラスは、文字ストリームを効率的に読み取るためのクラスです。このページではBufferedReaderの使い方、主要メソッド、具体例を詳しく説明します。
BufferedReaderとは
BufferedReaderは、Javaのjava.io
パッケージに含まれるクラスで、文字入力ストリームにバッファリング機能を追加します。これにより、効率的に文字、配列、または行単位でデータを読み取ることができます。
通常、FileReader
やInputStreamReader
などの文字ストリームクラスと組み合わせて使用します。
BufferedReaderのコンストラクタ
BufferedReaderクラスには以下の2つの主要なコンストラクタがあります:
-
BufferedReader(Reader in)
: 指定された文字ストリームにバッファリングを追加します。 -
BufferedReader(Reader in, int sz)
: バッファサイズを指定して文字ストリームにバッファリングを追加します。
通常、既定のバッファサイズ(8192バイト)で十分ですが、特定の用途に応じてバッファサイズを変更することも可能です。
BufferedReaderの主なメソッド
-
read()
: 1文字を読み取ります。 -
read(char[] cbuf, int off, int len)
: 配列にデータを読み取ります。 -
readLine()
: 1行分の文字を読み取ります。 -
ready()
: ストリームが準備できているか確認します。 -
close()
: ストリームを閉じます。
ファイルを読み込む例
以下はBufferedReaderを使用してファイルを行ごとに読み取る例です。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
コンソール入力を読み取る例
BufferedReaderを使用して、ユーザーのコンソール入力を読み取る方法を示します。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class ConsoleInputExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
System.out.println("Enter your name:");
String name = reader.readLine();
System.out.println("Hello, " + name + "!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
大きなファイルを効率的に処理する例
BufferedReaderを使用すると、大きなファイルを効率的に処理できます。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class LargeFileProcessingExample {
public static void main(String[] args) {
String filePath = "large_file.txt";
long lineCount = 0;
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
while (reader.readLine() != null) {
lineCount++;
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Total lines in the file: " + lineCount);
}
}
BufferedReaderの利点
- 大きなファイルや多数の行を効率的に処理できる。
- バッファリングにより、ディスクI/O操作の回数を削減。
- 行単位の読み取りが簡単。
BufferedReaderとScannerの比較
特徴 | BufferedReader | Scanner |
---|---|---|
パフォーマンス | 高速 | 低速(パース処理に時間がかかる) |
行単位の読み取り | 対応 | 対応 |
トークン分割 | 非対応 | 対応 |
BufferedReaderはファイルやテキストデータを効率的に処理したい場合に適しており、Scannerは入力データを簡単に分割して処理する際に便利です。