ByteArrayInputStream のドキュメントには次のように書かれています。
java.io.ByteArrayInputStream.ByteArrayInputStream(byte[] buf) buf をバッファ配列として使用するように ByteArrayInputStream を作成します。バッファ配列はコピーされません。pos の初期値は 0、count の初期値は buf の長さです。パラメータ: buf 入力バッファ。
以下のコードを実行すると、
byte[] b = new byte[10];
ByteArrayInputStream bais = new ByteArrayInputStream(b);
String someText = "Java byte arrayinput stream test - this string will be used.";
b = someText.getBytes();
int c =0;
while( ( c = bais.read()) != -1 ){
System.out.print((char)c);
}
私が得た出力は、テストに使用された文字列ではなく、10 バイトの空の配列に基づいています。これは、ByteArrayInputStream のコンストラクターが、渡されたバイト配列への参照を格納するのではなく、バイト配列をコピーする必要があることを示しています。これはドキュメントと矛盾しています。バイト配列がコピーされているかどうか、誰かが私の理解を明確にすることができますか?(コピーされていない場合、出力がバイト配列 b の状態を反映しないのはなぜですか?