Java 为什么您可以从tearrayoutputstream已经关闭的文件中读取数据?

Java 为什么您可以从tearrayoutputstream已经关闭的文件中读取数据?,java,java-io,bytearrayoutputstream,Java,Java Io,Bytearrayoutputstream,我想知道为什么您仍然可以通过tearrayoutputstream从已经关闭的读取字节。文档中的这一行不是相反的意思吗 public void close():关闭此流。这将释放用于此流的系统资源 示例代码: String data = "Some string ..."; ByteArrayOutputStream bOut = new ByteArrayOutputStream(); DataOutputStream dOut = new DataOutputStream(bOut); dO

我想知道为什么您仍然可以通过tearrayoutputstream从已经关闭的
读取字节。文档中的这一行不是相反的意思吗

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]);
输出:

我做错什么了吗?

只是复制缓冲区中的内容;它不再从溪流中读取任何内容

public synchronized byte[] toByteArray() {
    return Arrays.copyOf(buf, count);
}
这门课也有点特别。请参阅和代码

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


close()
实际上没有任何作用。

当您通过TearrayOutputStream关闭
时,您已经关闭了
DataOutputStream
@MitulSanghani当您关闭一个流时,任何嵌套流也会关闭。好的,谢谢,我不知道这一点。因为这就是它的用途。如果你以后不能从中获取数据,那就没什么用了。好的,谢谢。我认为close()应该刷新下面的buf。但似乎没有
public synchronized byte[] toByteArray() {
    return Arrays.copyOf(buf, count);
}
public void close() throws IOException {
}