假设我有以下内容:

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

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

如果我在boas上调用reset,则countsize以及所有其他因素表明它为空,但内部byte buf[]保持不变并已填充。

是否有任何方法可以在不创建全新的ByteArrayOutputStream的情况下真正解决此问题?

更一般而言,是否存在为什么ByteArrayOutputStream如此行为而不是清空byte[]的原因?

最佳答案

ByteArrayOutputStream.reset()状态的Javadoc



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

如果您想要其他行为,则可以从ByteArrayOutputStream派生一个类,并覆盖reset()buf[]count都是 protected 成员,因此,例如,您可以根据需要清除buf

关于java - 是否可以清除ByteArrayOutputStream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35450584/

10-13 04:33