工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

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()

例:バイト読み取り

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

  1. Java配列コピー技法:包括的ガイド
  2. Javaのfinalキーワード完全解説:変数、メソッド、クラスでの活用法
  3. Java instanceof演算子完全ガイド:基本から継承・インターフェースまで
  4. Java Staticネストクラスの理解:用法、違い、実例
  5. Java無名インナークラス完全ガイド:定義、構文、実践例
  6. Javaシングルトンパターン完全解説:安全な実装と活用法
  7. Javaリフレクション完全ガイド:実行時のクラス・メソッド・フィールド検査
  8. Java ObjectOutputStream完全ガイド:シリアル化、メソッド、実践例
  9. Java Scanner完全ガイド:実践例で学ぶ入力処理
  10. Javaジェネリクス完全ガイド:再利用可能で型安全なコードの構築
  11. Javaファイル操作のマスター:java.ioによる作成・読み取り・書き込み・削除