首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ByteArrayOutputStream容量限制

ByteArrayOutputStream容量限制
EN

Stack Overflow用户
提问于 2015-10-08 14:14:20
回答 3查看 7.6K关注 0票数 2

我创建ByteArrayOutputStream barr = new ByteArrayOutputStream(1);,即容量为1字节,并向其写入超过1字节的barr.write("123456789000000".getBytes());。没有发生错误,我检查barr的长度它是15。为什么我的写作没有被阻止或包装?是否有一种方法可以防止编写超出容量的内容,而哪一种outputstream可用于此?我的可用内存非常有限,我不想写得比我定义的更多。

P.S.非常感谢你的回答!我对问题做了跟踪,如果你能看的话

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-08 14:17:46

这是因为您为构造函数指定的容量是缓冲区的初始大小。如果您写入更多的数据,缓冲区将自动重新分配更大的大小,以适应更多的数据。

据我所知,ByteArrayOutputStream无法限制缓冲区的增长。您可以使用其他的东西,例如java.nio.ByteBuffer,它有固定的大小。

票数 3
EN

Stack Overflow用户

发布于 2015-10-08 14:18:12

如果您尝试编写更多的字节,ByteArrayOutputStream将生成支持数组。这通常被认为是一件好事。

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

ByteArrayOutputStream不是最终的,所以您可以扩展它。我认为,如果要写入的字节数大于剩余的字节数,则只需重写write(int)write(byte[], int, int)就可以抛出异常。字段bufcount受到保护,因此您的子类应该能够看到支持数组的写入量和数组的长度。

票数 4
EN

Stack Overflow用户

发布于 2017-04-21 05:25:17

我也遇到了同样的问题,并最终在Hadoop - BoundedByteArrayOutputStream.java中找到了一个现有的实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33018341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档