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
相关推荐
QQ_216962909621 分钟前
Spring Boot 养老院管理系统:从入住、护理到费用结算的全流程实现(源码可领)
java·spring boot·后端
cxoptics38 分钟前
冰洲石分束器设计与应用
java
ck-joker1 小时前
M1 Pro跑LLM实测:Ollama+LangChain4j零成本本地大模型开发,比云端API快在哪?
java·语言模型
丙氨酸長鏈1 小时前
[Bukkit插件开发]手持发射器箭矢机枪 教学文档 面向Python/C#开发者入门Java与Bukkit API
java·python·c#
Nontee1 小时前
设计模式:模板方法与策略,从“每个字都认识“到能说清它们在干嘛
java·数据库·设计模式
我是唐青枫1 小时前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java·开发语言
晨曦中的暮雨2 小时前
Virtual Thread 优化 Spring AI 阻塞式 LLM I/O:对照压测报告
java·并发·个人项目
AKA__Zas3 小时前
芝士算法(前缀和2.0)
java·数据结构·算法·leetcode·哈希算法·学习方法
caishenzhibiao3 小时前
降雨带波段点差 同花顺期货通指标
java·c语言·c#
七夜zippoe3 小时前
OpenClaw Prompt 工程:从角色设定到 Skill 封装的 Agent 输出质量方法论
java·服务器·prompt·openclaw·skill封装