Java 什么';缓冲区(int)和缓冲区()之间的区别是什么?
我试图向客户端发送一个数据包,我注意到即使我没有设置初始容量,也没有错误Java 什么';缓冲区(int)和缓冲区()之间的区别是什么?,java,netty,Java,Netty,我试图向客户端发送一个数据包,我注意到即使我没有设置初始容量,也没有错误 // 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
// 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());
这两者有什么区别吗?他们俩似乎都工作得很好
我还想知道我是否做得对,我正在创建一个新的
ByteBuf
,带有unmooled.buffer
,在其中写入数据并使用channel.write(ByteBuf)
将数据发送到频道,当我需要向客户端发送内容时。我做得对吗?区别在于它们的初始容量不同
// 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());
见文件:
创建一个新的big-endian Java堆缓冲区,其相当小
初始容量,可根据需要无限扩展容量
和文件:
创建具有指定容量的新big-endian Java堆缓冲区,
可根据需要无限扩展其容量
不同之处在于它们的初始容量不同
// 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());
见文件:
创建一个新的big-endian Java堆缓冲区,其相当小
初始容量,可根据需要无限扩展容量
和文件:
创建具有指定容量的新big-endian Java堆缓冲区,
可根据需要无限扩展其容量
从
创建一个新的big-endian Java堆缓冲区,初始容量相当小,可根据需要无限扩展其容量buffer()
创建具有指定容量的新big-endian Java堆缓冲区,该缓冲区可根据需要无限扩展其容量。新缓冲区的readerIndex和writerIndex为0缓冲区(int initialCapacity)
buffer(int)
执行与buffer()
相同的操作,但具有指定的启动容量。如果您知道需要比默认值更大的容量,它的性能会更好,因为如果没有足够的容量,它就不必继续扩展编辑:此外,正如@yelliver所述,您可以通过指定来节省内存,这可能取决于您创建的缓冲区对象的数量(或缓冲区的大小)
看起来buffer(int)
还设置了一些buffer()
可能不设置的索引
创建一个新的big-endian Java堆缓冲区,初始容量相当小,可根据需要无限扩展其容量buffer()
创建具有指定容量的新big-endian Java堆缓冲区,该缓冲区可根据需要无限扩展其容量。新缓冲区的readerIndex和writerIndex为0缓冲区(int initialCapacity)
buffer(int)
执行与buffer()
相同的操作,但具有指定的启动容量。如果您知道需要比默认值更大的容量,它的性能会更好,因为如果没有足够的容量,它就不必继续扩展编辑:此外,正如@yelliver所述,您可以通过指定来节省内存,这可能取决于您创建的缓冲区对象的数量(或缓冲区的大小)
看起来
buffer(int)
还设置了一些buffer()
可能不设置的索引。在一般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<>();
String[]arr=list.toArray(新字符串[list.size()]);
//或
字符串[]arr=list.toArray(新字符串[0]);
列表=新的ArrayList(10);
//或
列表=新的ArrayList();
如果允许默认容量:
在一般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<>();
String[]arr=list.toArray(新字符串[list.size()]);
//或
字符串[]arr=list.toArray(新字符串[0]);
列表=新的ArrayList(10);
//或
列表=新的ArrayList();
如果允许默认容量: