【发布时间】:2011-04-05 12:45:31
【问题描述】:
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 的状态?
【问题讨论】:
-
查看第 4 行,您会发现您的论点有什么问题。 b = someText.getBytes() 到底是做什么的?
-
我意识到了..,我只能对我在阅读所有答案后提出问题的方式感到震惊!