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
}
}
私にとって、「ByteArrayInput
Stream
"は、継続的に変更されているデータの連続的なstreamを意味します。これに基づいて、ByteArrayInputStream
のようなfeelsは、プレーンな 'oleの上にたくさんのベルとホイッスルを追加するので、私のユースケースに適していますbyte[]
。しかし、そのコンストラクタはbyte[]
を取り、構築後にbyte
sを追加することはできません。これは、この特定のケースでは必ずしも何もしない場合があります。
だから私の質問:
byte[]
よりもByteArrayInputStream
に利点がありますか?なぜ/そうでないのですか?この決定を下す要因は何ですか(一般的に)?InputStream
自体は、読み取り可能なバイトストリームの抽象化です。 ByteArrayInputStream
は、基になるInputStream
配列からストリーム内のバイトを取得するbyte
の特定の実装です(これは、コンストラクターが提供するものです)。
ここでのメソッドの場合、ByteArrayInputStream
を使用しても、クライアントはすべての種類のバイトソースをメソッドに渡すことができるため、InputStream
を確実に使用してもそれほどメリットはありません。それらを配列で読み取る必要があります。ストリームには、メモリ内のすべてのバイトを同時に持つ必要がないという利点もあります。これは、データのサイズが大きく、小さなチャンクで簡単に処理できる場合に便利です。