Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ByteArrayOutputStream容量限制_Java_Outputstream_Capacity - Fatal编程技术网

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参数只是数组缓冲区的初始大小。