为什么你可以从已经关闭的ByteArrayOutputStream中读取数据?

Rom*_*man 6 java bytearrayoutputstream java-io

我想知道为什么你仍然可以读取已经关闭的字节ByteArrayOutputStream.来自docs的这一行是不是意味着相反?

public void close ():关闭此流.这将释放用于此流的系统资源.

示例代码:

String data = "Some string ...";
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
DataOutputStream dOut = new DataOutputStream(bOut);
dOut.write(data.getBytes());
dOut.close();
System.out.println("Length: " + bOut.toByteArray().length);
System.out.println("Byte #2: " + bOut.toByteArray()[2]);
Run Code Online (Sandbox Code Playgroud)

输出:

Length: 15
Byte #2: 109
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?

Jay*_*yan 5

ByteArrayOutputStream.toByteArray只是复制它在缓冲区中的内容; 它不是从流中读取任何东西.

public synchronized byte[] toByteArray() {
    return Arrays.copyOf(buf, count);
}
Run Code Online (Sandbox Code Playgroud)

这个班也有点特别.请参阅Java文档和代码.

关闭ByteArrayOutputStream无效.在关闭流之后可以调用此类中的方法,而不会生成IOException.

public void close() throws IOException {
}
Run Code Online (Sandbox Code Playgroud)

close() 什么都不做