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

标签 java java-io bytearrayoutputstream

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

public void close (): Closes this stream. This releases system resources used for this stream.

示例代码:

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]);

输出:

Length: 15
Byte #2: 109

我做错了什么吗?

最佳答案

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

public synchronized byte[] toByteArray() {
    return Arrays.copyOf(buf, count);
}

这门课也有点特别。参见 Java documentation和代码。

Closing a ByteArrayOutputStream has no effect. The methods in this class can be called after the stream has been closed without generating an IOException.

public void close() throws IOException {
}

close() 并没有真正做任何事情。

关于java - 为什么可以从已经关闭的 ByteArrayOutputStream 中读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29791866/

相关文章:

java - 使用java下载pdf

java - 如何在 Java 中将多个值存储在字节数组中?

java - 从 ByteStream 创建 ZIP/TGZ 存档

java字节数组输出流什么都不给

java - 如何在 SOLR 中以编程方式指定 update.chain

java - 让 Action 更加流畅

java - 强制 jidetabbedpane 始终显示第一个选项卡的任何方法

Java,与数组的组合算法

java - Android - 保存到文本文件

java - 文本文件转换为数组列表时出现问题