ByteArrayOutputStream 容量限制

Yak*_*kov 1 java outputstream capacity

我创建ByteArrayOutputStream barr = new ByteArrayOutputStream(1);,即容量为 1 个字节并写入超过 1 个字节barr.write("123456789000000".getBytes());。没有错误,我查了一下长度barr是15。为什么我的文字没有被阻塞或包裹?有没有一种方法可以防止写入超过容量的内容,哪些outputstream可以用于此目的?我的可用内存非常有限,不想在那里写超出我的限制定义的内容

PS 非常 感谢您的回答!我有一个后续问题 如果你能看一下会很棒

dka*_*zel 5

ByteArrayOutputStream如果您尝试写入更多字节,则会增加后备数组。这通常被认为是一件好事。

如果您想要不同的行为,您始终可以编写自己的OutputStream实现,如果要写入的字节数超出容量,则会抛出 IOException。

ByteArrayOutputStream不是最终的,所以你可以扩展它。我认为如果要写入的字节数超过剩余数量,您所要做的就是覆盖write(int)write(byte[], int, int)抛出异常。字段bufcount受到保护,因此您的子类应该能够看到写入了多少支持数组以及数组的长度