说明
使用Netty的ByteBuf,空间不够时可以自动扩充。扩充时,不是一个字节一个字节的扩充,而是扩充一段空间。对于不同的ByteBufAllocator实现,每次扩充的空间大小也不相同。
代码举例
使用Unpooled分配ByteBuf
下面这段代码,使用Unpooled来分配ByteBuf,但底层使用的是UnpooledByteBufAllocator实现来分配ByteBuf。初始化的时候设置ByteBuf的容量为5个字节,在填充时,填充了6个字节的内容,导致ByteBuf自动扩充空间:
package com.thb;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.Unpooled;
public class Test {
	public static void main(String[] args) {		
		ByteBuf buf = Unpooled.buffer(5);		
		//ByteBuf buf = ByteBufAllocator.DEFAULT.buffer(5);
		System.out.println("the actual ButeBuf allocator: " + buf.alloc());
		
		System.out.println("ByteBuf's initial capcacity: " + buf.capacity());
		
		for (int i = 0; i < 6; i++) {
			buf.writeByte(0x68);
		}
		
		System.out.println("after expanding, ByteBuf's capacity: " + buf.capacity());		
	}
}
运行输出:
 
 从上面的输出可以发现,底层调用的是UnpooledByteBufAllocator(directByDefault: true)来分配ByteBuf,尽管只填充了6个字节的内容,但因为空间不够,自动扩充到了64个字节的空间。
使用ByteBufAllocator.DEFAULT来分配ByteBuf
下面这段代码,使用ByteBufAllocator.DEFAULT来分配ByteBuf,但底层使用的是PooledByteBufAllocator(directByDefault: true)实现来分配ByteBuf。初始化的时候设置ByteBuf的容量为5个字节,在填充时,填充了6个字节的内容,导致ByteBuf自动扩充空间:
package com.thb;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.Unpooled;
public class Test {
	public static void main(String[] args) {		
		//ByteBuf buf = Unpooled.buffer(5);		
		ByteBuf buf = ByteBufAllocator.DEFAULT.buffer(5);
		System.out.println("the actual ButeBuf allocator: " + buf.alloc());
		
		System.out.println("ByteBuf's initial capcacity: " + buf.capacity());
		
		for (int i = 0; i < 6; i++) {
			buf.writeByte(0x68);
		}
		
		System.out.println("after expanding, ByteBuf's capacity: " + buf.capacity());		
	}
}
运行输出:
 
 从上面的输出可以发现,底层调用的是PooledByteBufAllocator(directByDefault: true)来分配ByteBuf,尽管只填充了6个字节的内容,但因为空间不够,自动扩充到了16个字节的空间。








![[回馈]ASP.NET Core MVC开发实战之商城系统(五)](https://img-blog.csdnimg.cn/img_convert/d851b996d65c529cd26a2e7695628207.png)








![[openCV]基于拟合中线的智能车巡线方案V3](https://img-blog.csdnimg.cn/6d6e0e96c2dc49d2b5af82306de736db.png)
