7

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

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

输出:

Length: 15
Byte #2: 109

难道我做错了什么?

4

1 回答 1

6

ByteArrayOutputStream.toByteArray只是复制缓冲区中的内容;它没有从流中读取更多内容。

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

这门课也有点特别。请参阅Java 文档和代码。

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

public void close() throws IOException {
}

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

于 2015-04-22T08:38:43.677 回答