![](/img/trans.png)
[英]What's the difference between BufferedInputStream and java.nio.Buffer?
[英]What's the difference between buffer(int) and buffer()?
我试图将数据包发送到客户端,我注意到即使我没有设置初始容量也没有错误。
// data is another ByteBuf object
// With capacity
ByteBuf d = Unpooled.buffer(2 + data.array().length);
d.writeByte(identifiers[0]).writeByte(identifiers[1]).writeBytes(data.array());
// Without capacity
ByteBuf d = Unpooled.buffer();
d.writeByte(identifiers[0]).writeByte(identifiers[1]).writeBytes(data.array());
两者之间有什么区别吗? 他们俩似乎都工作正常。
我也想知道我是否做对了,我正在用Unpooled.buffer
创建一个新的ByteBuf
,在其中写入我的数据,并在需要向客户端发送内容时使用channel.write(ByteBuf)
将其发送到通道。 我做对了吗?
从文档:
buffer()
创建一个具有较小初始容量的新的大端Java堆缓冲区,该缓冲区按需无限扩展。
buffer(int initialCapacity)
创建具有指定容量的新的大端Java堆缓冲区,该缓冲区可根据需要无限扩展。 新缓冲区的readerIndex和writerIndex为0。
因此, buffer(int)
功能与buffer()
相同,但是具有指定的起始容量。 如果您知道需要的容量比默认容量大,它将更好地执行,因为如果没有足够的容量,则不必继续扩展。 编辑 :同样,如@yelliver所述,您可以通过指定来节省内存,具体取决于您创建的缓冲区对象的数量(或取决于缓冲区的大小),它们的总和。
看起来buffer(int)
还设置了一些buffer()
可能没有的索引。
不同之处在于它们具有不同的初始容量。
请参阅buffer()
文档:
创建一个初始容量较小的新的大端Java堆缓冲区,该缓冲区可根据需要无限扩展。
和buffer(int initialCapacity)
doc:
创建一个具有指定容量的新的大端Java堆缓冲区,该缓冲区可根据需要无限扩展。
在一般的Java中,很多情况下您可以传递容量或不传递容量,两者都可以。 如果您不通过该容量,它将具有默认容量,当容量已满时,它将自动扩展。 例如:
String[] arr = list.toArray(new String[list.size()]);
//OR
String[] arr = list.toArray(new String[0]);
List<String> list = new ArrayList<>(10);
//OR
List<String> list = new ArrayList<>();
如果让默认容量:
如果您通过了意图能力:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.