Java ByteArrayInputStream:バイト配列からの読み取り実践ガイド
Java ByteArrayInputStream
JavaのByteArrayInputStreamを使用してバイト配列からデータを読み取る方法を、コンストラクタ、主要メソッド、実践例で解説します。
ByteArrayInputStreamとは?
ByteArrayInputStreamクラスはjava.ioパッケージの一部で、InputStreamを実装し、バイト配列を入力ストリームとして扱えるようにします。内部的に供給された配列のコピーを保持し、ランダムアクセスと効率的な読み取りを可能にします。
注意: ストリームは外部ソースではなく配列自体から読み取るため、すべての操作はメモリベースです。
ByteArrayInputStreamの作成
java.io.ByteArrayInputStreamをインポートし、インスタンス化します。配列全体またはスライスを読み取れます。
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr);
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr, int start, int length);
2番目のコンストラクタは、インデックスstartからlengthバイトを読み取ります。
コアメソッド
read()
int read()– 次のバイトを読み取り、末尾なら-1を返すint read(byte[] b)– 供給された配列にデータを格納int read(byte[] b, int off, int len)– 最大lenバイトをbのオフセットoffから読み取り
例:バイト読み取り
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] array = {1, 2, 3, 4};
try (ByteArrayInputStream input = new ByteArrayInputStream(array)) {
System.out.print("読み取ったバイト: ");
int value;
while ((value = input.read()) != -1) {
System.out.print(value + ", ");
}
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
}
}
出力
読み取ったバイト: 1, 2, 3, 4,
available()
ブロックせずに読み取れる残りバイト数を返します。
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] array = {1, 2, 3, 4};
try (ByteArrayInputStream input = new ByteArrayInputStream(array)) {
System.out.println("初期状態: " + input.available());
input.read();
input.read();
System.out.println("2回読み取り後: " + input.available());
} catch (Exception e) {
e.printStackTrace();
}
}
}
出力
初期状態: 4 2回読み取り後: 2
skip()
要求されたバイト数だけストリーム位置を進めます。
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] array = {1, 2, 3, 4};
try (ByteArrayInputStream input = new ByteArrayInputStream(array)) {
input.skip(2);
System.out.print("スキップ後: ");
int value;
while ((value = input.read()) != -1) {
System.out.print(value + ", ");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
出力
スキップ後: 3, 4,
close()
ByteArrayInputStreamを閉じても何もしません(no-op)。ストリームはその後も使用可能です。このメソッドはAPI互換性のためにのみ存在します。
その他の便利なメソッド
| メソッド | 説明 |
|---|---|
mark(int readlimit) | 現在位置をマーク |
reset() | 最後にマークした位置に戻る |
markSupported() | 常にtrueを返す |
finalize() | リソース解放を保証(このクラスでは効果なし) |
完全なAPIについては公式Javaドキュメントを参照。
Java
- Java配列コピー技法:包括的ガイド
- Javaのfinalキーワード完全解説:変数、メソッド、クラスでの活用法
- Java instanceof演算子完全ガイド:基本から継承・インターフェースまで
- Java Staticネストクラスの理解:用法、違い、実例
- Java無名インナークラス完全ガイド:定義、構文、実践例
- Javaシングルトンパターン完全解説:安全な実装と活用法
- Javaリフレクション完全ガイド:実行時のクラス・メソッド・フィールド検査
- Java ObjectOutputStream完全ガイド:シリアル化、メソッド、実践例
- Java Scanner完全ガイド:実践例で学ぶ入力処理
- Javaジェネリクス完全ガイド:再利用可能で型安全なコードの構築
- Javaファイル操作のマスター:java.ioによる作成・読み取り・書き込み・削除