ByteArrayInputStream 上的文档说:
java.io.ByteArrayInputStream.ByteArrayInputStream(byte[] buf) 创建一个 ByteArrayInputStream 以便它使用 buf 作为其缓冲区数组。不复制缓冲区数组。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 的状态?