是否可以清除ByteArrayOutputStream

imr*_*ole 5 java

我们假设我有以下内容:

final ByteArrayOutputStream boas = new ByteArrayOutputStream();
final byte[] sample = {1,2,3,4,5,6,7,8,9,10};
boas.write(sample);
Run Code Online (Sandbox Code Playgroud)

此时,byte buf[]内部的后备数组boas包含上面的10个字节(和22个填充字节).

如果我boascount和上调用reset ,size并且所有其他因素都表明它是空的,但内部byte buf[]保持不变并填充.

无论如何要真正清除这一点而不创造一个全新的ByteArrayOutputStream

更一般地说,ByteArrayOutputStream是否有这样的行为而不是清空byte[]

wer*_*ero 9

对Javadoc ByteArrayOutputStream.reset()状态

count将此字节数组输出流的字段重置为零,以便丢弃输出流中当前累积的所有输出.可以再次使用输出流,重用已分配的缓冲区空间.

性能方面,重用已分配的缓冲区是有意义的.

如果您想要一个不同的行为,您可以从中派生一个类ByteArrayOutputStream并覆盖它reset().这两个buf[]count保护成员,因此,例如,你可以清除buf,如果你想要的.


小智 1

ByteArrayOutputStream没有提供清空byte[] buf. 看一下源代码buf不能直接修改。

您可以编写一个继承自的类,ByteArrayOutputStream并向empty 添加一个方法 buf