私が理解しているように、データByteArrayInputStream
の読み取りに使用されbyte[]
ます。単純ではなく使用する必要があるのはなぜですかbyte[]
(たとえば、DB から読み取るなど)。
それらの違いは何ですか?
私が理解しているように、データByteArrayInputStream
の読み取りに使用されbyte[]
ます。単純ではなく使用する必要があるのはなぜですかbyte[]
(たとえば、DB から読み取るなど)。
それらの違いは何ですか?
入力が常にabyte[]
である場合、その通りです。多くの場合、ストリームは必要ありません。また、必要ない場合は使用しないでください。ByteArrayInputStream のもう 1 つの利点は、バイトを読み取り専用にするつもりであることを非常に強力に示すものとして機能することです (ストリームはバイトを変更するためのインターフェイスを提供しないため)。それでもバイトに直接アクセスするため、セキュリティが懸念される状況では使用しないでください。
しかし、それがbyte[]
、ファイル、ネットワーク接続などである場合は、「バイトのストリームであり、どこから来たのかは気にしない」ためのある種の抽象化が必要です。それが InputStream です。ソースがたまたまバイト配列である場合、ByteArrayInputStream は使用するのに適した InputStream です。
これは多くの状況で役立ちますが、具体的な例を 2 つ挙げます。
byte[]
メモリ内、またはその他のソースからバイトを提供できます。したがって、を受け入れるインターフェースを提供しますInputStream
— つまり、持っているものが である場合、byte[]
それを ByteArrayInputStream でラップする必要があります。ストリームには、すべてのバイトを同時にメモリに格納する必要がないという利点もあります。これは、データのサイズが大きく、小さなチャンクで簡単に処理できる場合に便利です。
選択した場合と同様に、読み取り、スキップ、および現在のインデックスの追跡を明示的に行うためにホイールを生成するbyte[]
必要があります
byte data[] = { 65, 66, 67, 68, 69 }; // data
for (int index = 0; index < data.length; index++) {
System.out.print((char) data[index] + " ");
}
int c = 0;
ByteArrayInputStream bInput = new ByteArrayInputStream(data);
while ((bInput.read()) != -1) {
System.out.println(Character.toUpperCase((char) c));
}