Java BufferedInputStream完全ガイド:効率的なバイト読み取りと高度なメソッド
Java BufferedInputStreamクラス概要
JavaのBufferedInputStreamクラス、その主要メソッド、ファイルI/Oパフォーマンスを向上させる実践例を解説します。
java.ioパッケージのBufferedInputStreamクラスは、内部バッファを追加することでバイトレベルの入力ストリームを強化し、より高速で効率的なデータ読み取りを可能にします。
抽象InputStreamクラスを拡張しています。
BufferedInputStreamの仕組み
BufferedInputStreamはデフォルトで8,192バイトの内部バッファを保持します。読み取り操作が要求されると、基盤ストリーム(通常はファイル)からバイトブロックが取得され、このバッファに格納されます。以降の読み取り呼び出しはバッファが尽きるまでバッファからバイトを消費し、その時点で次のブロックが読み込まれます。これによりコストの高いディスクI/Oが削減され、データ消費が高速化されます。
BufferedInputStreamの作成
BufferedInputStreamを作成するには、まずクラスをインポート:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
次に、FileInputStreamなどの低レベルストリームをラップしてインスタンス化:
FileInputStream file = new FileInputStream("example.txt");
BufferedInputStream buffer = new BufferedInputStream(file);
オプションでカスタムバッファサイズを指定:
int bufferSize = 16_384; // 16 KB
BufferedInputStream buffer = new BufferedInputStream(file, bufferSize);
バッファが大きいほどディスクアクセスが減るため、大容量ファイルやネットワークストリームに有用です。
BufferedInputStreamの主要メソッド
read()
int read()– 1バイト読み取り、整数(0-255)として返す。ストリーム末尾なら-1int read(byte[] b)– 最大b.lengthバイトを配列に読み取りint read(byte[] b, int off, int len)– 最大lenバイトをbのオフセットoffから読み取り
例:テキストファイルをバイト単位で読み取りコンソールに出力
import java.io.BufferedInputStream;
import java.io.FileInputStream;
public class Main {
public static void main(String[] args) {
try (BufferedInputStream in = new BufferedInputStream(new FileInputStream("input.txt"))) {
int byteRead;
while ((byteRead = in.read()) != -1) {
System.out.print((char) byteRead);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
出力:
This is a line of text inside the file.
available()
available()メソッドは、ブロックせずにストリームから読み取れるバイト数を報告します。大容量ストリーム処理時の進捗把握に役立ちます。
FileInputStream file = new FileInputStream("input.txt");
BufferedInputStream buffer = new BufferedInputStream(file);
System.out.println("利用可能バイト数: " + buffer.available());
// ... データ読み取り
System.out.println("残りバイト数: " + buffer.available());
buffer.close();
skip(long n)
skip()で指定バイト数をバイパス。実際にスキップしたバイト数を返し、ストリーム末尾に達した場合は要求より少なくなる可能性があります。
buffer.skip(5); // 最初の5バイトをスキップ
close()
ストリームを常に閉じ(try-with-resourcesブロック推奨)、システムリソースを解放。閉じた後はストリームを再利用できません。
その他の注目メソッド
| メソッド | 説明 |
|---|---|
mark(int readLimit) | ストリームの現在位置をマーク。readLimitバイト以上読み取らない限り、後続のreset()でこの地点に戻れる |
reset() | ストリームを最後にマークした位置に再配置 |
完全なリファレンスは公式Javaドキュメントを参照。
Java
- Javaのfinalキーワード完全解説:変数、メソッド、クラスでの活用法
- Java instanceof演算子完全ガイド:基本から継承・インターフェースまで
- Java継承のマスター:概念、種類、実践例
- Java Staticネストクラスの理解:用法、違い、実例
- Java無名インナークラス完全ガイド:定義、構文、実践例
- Javaシングルトンパターン完全解説:安全な実装と活用法
- Javaリフレクション完全ガイド:実行時のクラス・メソッド・フィールド検査
- Java ObjectOutputStream完全ガイド:シリアル化、メソッド、実践例
- Java BufferedReader完全ガイド:効率的な文字ストリーム処理
- Javaジェネリクス完全ガイド:再利用可能で型安全なコードの構築
- Javaファイル操作のマスター:java.ioによる作成・読み取り・書き込み・削除