0Pricing
Java Academy · レッスン

BufferedReaderを使う理由

バッファリングありとなしの読み取りを比較します。

「BufferedReaderを使う理由」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。

Javaで入力を読み取る

実際のプログラムの多くは、ユーザーからの入力を必要とします。名前、数値、コマンドなどです。Javaには入力を読み取る方法がいくつかありますが、最も一般的で効率的な方法の1つがBufferedReaderです。

このレッスンでは、BufferedReaderがなぜ存在するのか、そしていつ使うべきかを学びます。

入力元

コンソールに入力すると、テキストはSystem.inを通って入ってきます。これは低レベルのバイトストリームであり、扱いやすいテキストではなく生のバイトを提供します。

そのバイトを読み取り可能な文字や行全体に変換するには、System.inをヘルパークラスでラップします。BufferedReaderは、この処理を簡単にするラッパーです。

バッファ付きとは

キーボードやファイルから1バイトずつ読み取るのは低速です。バッファとは、一度に多くの文字を保持するメモリ領域です。

BufferedReaderはこのバッファをまとめて読み込み、その後データをすばやく渡します。基盤となるストリームへのアクセス回数が減るため、特に入力が大きい場合にパフォーマンスが向上します。

2層構成

BufferedReaderはSystem.inを直接読み取れません。これは、そのストリームがバイトを提供するためです。まずInputStreamReaderでラップし、バイトを文字に変換します。

  • System.in → バイト
  • InputStreamReader → 文字
  • BufferedReader → バッファリングされた行
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

定番の1行コード

コンソール入力を読み取るほぼすべてのJavaプログラムで、この正確な行を目にすることになります。2つのラッパーを1つの文で連結しています。

覚えておきましょう。内側のInputStreamReaderはバイトから文字への変換を担当し、外側のBufferedReaderはバッファリングと便利なreadLine()メソッドを追加します。

BufferedReader br =
    new BufferedReader(new InputStreamReader(System.in));

必要なインポート

これらのクラスはjava.ioパッケージに含まれているため、ファイルの先頭でインポートする必要があります。

入力の読み取りは失敗する可能性があるため、メソッドはIOExceptionをスローします。これもインポートするか処理する必要がありますが、詳しくは後で説明します。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

BufferedReaderとScannerの比較

初心者はまずScannerを使うことがよくあります。Scannerは数値を直接パースできて扱いやすい一方、低速です。

  • Scanner:パースは簡単ですが、オーバーヘッドが大きくなります。
  • BufferedReader:高速で行全体を読み取れますが、数値は自分でパースする必要があります。

大きな入力や競技プログラミングでは、速度の面でBufferedReaderが優れています。

行全体を読み取る

中心となるメソッドはreadLine()です。ユーザーが入力してEnterを押すまでのすべてを読み取り、改行なしのStringとして返します。

入力がもう存在しない場合、readLine()はnullを返します。これについては次のレッスンで詳しく説明します。

String name = br.readLine();
System.out.println("Hello, " + name);

完全な読み取りプログラム

完全なプログラムを見てみましょう。1行を読み取り、ユーザーに挨拶します。mainにthrows IOExceptionが付いている点に注目してください。これは、学習中に入力エラーを上位へ伝播させる簡単な方法です。

このスニペットはキーボード入力を待つため、ここでは自動実行できませんが、正しいJavaコードです。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        String name = br.readLine();
        System.out.println("Hi " + name);
    }
}

入力なしで動作を確認する

ラッパーが存在し、コンパイルできることを確認するため、何も読み取らず、オブジェクトが作成されたことだけを確認する実行可能なバージョンを示します。

実際のアプリではreadLine()を呼び出しますが、このバージョンではメッセージを表示するため、今すぐ実行できます。

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) {
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        System.out.println("BufferedReader is ready!");
    }
}

BufferedReaderを使う場面

次のような場合はBufferedReaderを使います:

  • 多数の行や大きなファイルを読み取る場合
  • 速度を重視する場合
  • 単純に行単位でテキストを扱いたい場合

数値をすばやくパースしたく、入力が小さい場合は、代わりにScannerを使います。どちらも有効な方法です。適切なツールを選びましょう。

確認問題

BufferedReaderの構成について理解度を確認します。

まとめ

System.inはバイトストリームであり、InputStreamReader(バイトから文字への変換)、続いてBufferedReader(バッファリングとreadLine())でラップされることを学びました。

バッファリングによってパフォーマンスが向上し、BufferedReaderは大きな入力や行単位の入力で力を発揮します。次は、行の読み取りについて詳しく学びます。

よくある質問

「BufferedReaderを使う理由」レッスンは無料ですか?

はい。「BufferedReaderを使う理由」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。

「BufferedReaderを使う理由」で何を学びますか?

バッファリングありとなしの読み取りを比較します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「BufferedReaderを使う理由」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. BufferedReaderを使う理由
  2. 行の読み取り
  3. 入力から数値を解析する
  4. ストリームを安全に閉じる
← Java Academyに戻る