Java ByteArrayOutputStream容量限制
我创建Java ByteArrayOutputStream容量限制,java,outputstream,capacity,Java,Outputstream,Capacity,我创建ByteArrayOutputStream barr=newbytearrayoutputstream(1),即容量为1个字节,并写入超过1个字节的barr.write(“12345678000000.getBytes())。没有错误发生,我检查了barr的长度是15。为什么我的文章没有被屏蔽或包装?有没有一种方法可以防止写入超过容量的数据,并且可以使用哪个outputstream来实现这一点? 我的可用内存非常有限,不想在那里写超过我的限制定义的内容 p.S. 谢谢你的回答!我有一个跟进
ByteArrayOutputStream barr=newbytearrayoutputstream(1)代码>,即容量为1个字节,并写入超过1个字节的barr.write(“12345678000000.getBytes())代码>。没有错误发生,我检查了barr
的长度是15。为什么我的文章没有被屏蔽或包装?有没有一种方法可以防止写入超过容量的数据,并且可以使用哪个outputstream
来实现这一点?
我的可用内存非常有限,不想在那里写超过我的限制定义的内容
p.S.
谢谢你的回答!我有一个跟进
如果您可以查看,那就太好了,因为您为构造函数指定的容量是缓冲区的初始大小。如果写入更多数据,缓冲区将自动重新分配更大的大小,以适应更多数据
据我所知,使用ByteArrayOutputStream
无法限制缓冲区的增长。您可以使用其他东西,例如具有固定大小的java.nio.ByteBuffer
。这是因为您指定给构造函数的容量是缓冲区的初始大小。如果写入更多数据,缓冲区将自动重新分配更大的大小,以适应更多数据
据我所知,使用ByteArrayOutputStream
无法限制缓冲区的增长。您可以使用其他东西,例如具有固定大小的java.nio.ByteBuffer
。ByteArrayOutputStream
如果您尝试写入更多字节,将增加备份数组。这通常被认为是一件好事
如果您想要不同的行为,您可以始终编写自己的OutputStream
实现,如果要写入的字节数超出容量,该实现将引发IOException
ByteArrayOutputStream
不是最终版本,因此您可以对其进行扩展。我认为您需要做的就是重写write(int)
和write(byte[],int,int)
以在要写入的字节数超过剩余的字节数时抛出异常。字段buf
和count
受到保护,因此您的子类应该能够看到有多少备份数组被写入,并且如果您尝试写入更多字节,则数组的长度将增加备份数组。这通常被认为是一件好事
如果您想要不同的行为,您可以始终编写自己的OutputStream
实现,如果要写入的字节数超出容量,该实现将引发IOException
ByteArrayOutputStream
不是最终版本,因此您可以对其进行扩展。我认为您需要做的就是重写write(int)
和write(byte[],int,int)
以在要写入的字节数超过剩余的字节数时抛出异常。字段buf
和count
受到保护,因此您的子类应该能够看到备份数组的写入量和数组的长度我遇到了相同的问题,并最终在Hadoop中找到了相同问题的现有实现-我遇到了相同的问题,最终在Hadoop中找到了一个相同的现有实现-根据Javadoc,“缓冲区会随着数据写入而自动增长。”即-给定的容量是初始容量?正确-构造函数中的int参数只是数组缓冲区的初始大小。根据Javadoc,“当数据写入缓冲区时,缓冲区会自动增长。”即-给定的容量是初始容量?正确-构造函数中的int参数只是数组缓冲区的初始大小。