Netty:ByteBuf的最大快速可以写入字节数

说明

  • 通过io.netty.buffer.ByteBuf的maxFastWritableBytes()函数可以得到最大快速可写入字节数。最大快速可写入字节数表示没有内部再分配内存的情况下肯定可以写入的最大字节数。
  • maxFastWritableBytes() = capacity(容量) - writerIndex
  • writableBytes() <= maxFastWritableBytes() <= maxWritableBytes()。

示例

复制代码
package com.thb;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

public class Test {

	public static void main(String[] args) {
		// 创建一个ByteBuf,没有明确指明初始容量、最大容量
		ByteBuf buf = Unpooled.buffer();
		// 写入1个字节
		buf.writeByte(0x68);  
		// 当前的writerIndex
		System.out.println("buf.writerIndex: " + buf.writerIndex());
		// 当前的容量
		System.out.println("buf.capacity: " + buf.capacity());
		// 最大容量
		System.out.println("buf.maxCapacity: " + buf.maxCapacity());
		// 可写入字节数
		System.out.println("buf.writableBytes: " + buf.writableBytes());
		// 最大可写入字节数
		System.out.println("buf.maxWritableBytes: " + buf.maxWritableBytes());
		// 最大快速可写入字节数
		System.out.println("buf.maxFastWritableBytes: " + buf.maxFastWritableBytes());
		
		System.out.println("------------------------");
		// 创建一个ByteBuf,明确指明初始容量是3、最大容量是10
		ByteBuf buf2 = Unpooled.buffer(3, 10);
		// 写入1个字节
		buf2.writeByte(0x68);	
		System.out.println("buf2.writerIndex: " + buf2.writerIndex());	
		System.out.println("buf2.capacity: " + buf2.capacity());	
		System.out.println("buf2.maxCapacity: " + buf2.maxCapacity());		
		System.out.println("buf2.writableBytes: " + buf2.writableBytes());		
		System.out.println("buf2.maxWritableBytes: " + buf2.maxWritableBytes());		
		System.out.println("buf2.maxFastWritableBytes: " + buf2.maxFastWritableBytes());
		
		System.out.println("------------------------");
		// 创建一个ByteBuf,明确指明初始容量是3、最大容量是10
		ByteBuf buf3 = Unpooled.buffer(3, 10);
		// 写入3个字节,刚好把初始容量用完了
		for (int i = 0; i < 3; i++) {
			buf3.writeByte(0x68);
		}		
		System.out.println("buf3.writerIndex: " + buf3.writerIndex());
		System.out.println("buf3.capacity: " + buf3.capacity());
		System.out.println("buf3.maxCapacity: " + buf3.maxCapacity());
		System.out.println("buf3.writableBytes: " + buf3.writableBytes());	
		System.out.println("buf3.maxWritableBytes: " + buf3.maxWritableBytes());
		System.out.println("buf3.maxFastWritableBytes: " + buf3.maxFastWritableBytes());
		
		System.out.println("------------------------");
		// 创建一个ByteBuf,明确指明初始容量是3、最大容量是10
		ByteBuf buf4 = Unpooled.buffer(3, 10);
		// 写入4个字节。在写入第4个字节的时候,ByteBuf自动扩展了一次
		for (int i = 0; i < 4; i++) {
			buf4.writeByte(0x68);
		}		
		System.out.println("buf4.writerIndex: " + buf4.writerIndex());
		System.out.println("buf4.capacity: " + buf4.capacity());
		System.out.println("buf4.maxCapacity: " + buf4.maxCapacity());
		System.out.println("buf4.writableBytes: " + buf4.writableBytes());		
		System.out.println("buf4.maxWritableBytes: " + buf4.maxWritableBytes());
		System.out.println("buf4.maxFastWritableBytes: " + buf4.maxFastWritableBytes());
	}
}

运行输出:

复制代码
buf.writerIndex: 1
buf.capacity: 256
buf.maxCapacity: 2147483647
buf.writableBytes: 255
buf.maxWritableBytes: 2147483646
buf.maxFastWritableBytes: 255
------------------------
buf2.writerIndex: 1
buf2.capacity: 3
buf2.maxCapacity: 10
buf2.writableBytes: 2
buf2.maxWritableBytes: 9
buf2.maxFastWritableBytes: 2
------------------------
buf3.writerIndex: 3
buf3.capacity: 3
buf3.maxCapacity: 10
buf3.writableBytes: 0
buf3.maxWritableBytes: 7
buf3.maxFastWritableBytes: 0
------------------------
buf4.writerIndex: 4
buf4.capacity: 10
buf4.maxCapacity: 10
buf4.writableBytes: 6
buf4.maxWritableBytes: 6
buf4.maxFastWritableBytes: 6
相关推荐
缓慢更新8 分钟前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
LMT流氓兔2 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
wangbing11253 小时前
平台介绍-modbus设备调试
java
西索斯coding3 小时前
gpt-image-2.5-sunburst 和 gemini-3.1-flash-image 差多少?60 组项目素材的成功成本评测框架
java·linux·gpt·ai
wuminyu4 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
Flynn Liang4 小时前
大模型怎么自己调函数?Spring AI 2.0 Tool Calling 自动循环原理 + 完整时序图
java·人工智能·spring·agent·函数调用·springai·toolcalling
乌暮5 小时前
请求进门先安检:Spring 拦截器与统一功能实战指南
java·开发语言·后端·学习·spring
学长毕设5 小时前
基于SpringBoot的烘焙商品商品系统-附源码
java·spring boot·后端
金銀銅鐵6 小时前
[Java] 用纯 Swing 做一个《論語·學而》阅读器
java·ai编程·交互设计
艾伦_耶格宇7 小时前
【kubernetes - 1.28版本】-11 K8S核心组件
java·容器·kubernetes