web-dev-qa-db-ja.com

Java ByteArrayInputStream vsバイト配列の利点?

Javaプロセスがバイナリデータのストリームを受信するというシナリオがあります。

public class DataHandler {
    public void handleData(DATA data) {
        // TODO: Do something with data
    }
}

DATAの適切なタイピングを理解しようとしています。 byte[]を使用できます:

public class DataHandler {
    public void handleData(byte[] data) {
        // TODO: Do something with data
    }
}

またはByteArrayInputStream

public class DataHandler {
    public void handleData(ByteArrayInputStream dataStream) {
        // TODO: Do something with dataStream
    }
}

私にとって、「ByteArrayInputStream "は、継続的に変更されているデータの連続的なstreamを意味します。これに基づいて、ByteArrayInputStreamのようなfeelsは、プレーンな 'oleの上にたくさんのベルとホイッスルを追加するので、私のユースケースに適していますbyte[]。しかし、そのコンストラクタはbyte[]を取り、構築後にbytesを追加することはできません。これは、この特定のケースでは必ずしも何もしない場合があります。

だから私の質問:

  1. 私の使用例では、byte[]よりもByteArrayInputStreamに利点がありますか?なぜ/そうでないのですか?この決定を下す要因は何ですか(一般的に)?
  2. 私がここで推奨した方法のほかに、フローデータ(最終的にはバイトとして到着する)の真のstreamを表すより良い方法はありますか?
6
herpylderp

InputStream自体は、読み取り可能なバイトストリームの抽象化です。 ByteArrayInputStreamは、基になるInputStream配列からストリーム内のバイトを取得するbyteの特定の実装です(これは、コンストラクターが提供するものです)。

ここでのメソッドの場合、ByteArrayInputStreamを使用しても、クライアントはすべての種類のバイトソースをメソッドに渡すことができるため、InputStreamを確実に使用してもそれほどメリットはありません。それらを配列で読み取る必要があります。ストリームには、メモリ内のすべてのバイトを同時に持つ必要がないという利点もあります。これは、データのサイズが大きく、小さなチャンクで簡単に処理できる場合に便利です。

6
bowmore