3-网络架构和Netty系列-Java NIO三件套Buffer、Selector、Channel

Java NIO中的核心组件包括缓冲区(Buffer)、选择器(Selector)和通道(Channel)。缓冲区是一个数据容器,提供了position、limit和capacity等属性进行数据操作。通道用于读写数据,而选择器则用于非阻塞I/O,提高服务器处理多个客户端连接的能力。缓冲区可以通过allocate()分配,slice()创建子缓冲区,asReadOnlyBuffer()转换为只读。直接缓冲区使用特殊内存,内存映射文件则能加速文件读写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java NIO三件套

在NIO中有三个核心对象需要掌握:缓冲区(Buffer)、选择器(Selector)和通道(Channel)

缓冲区

Buffer操作基本API

缓冲区实际上是一个容器对象,更直接地说,其实就是一个数组,在NIO库中,所有数据都是用缓冲区处理的

在读取数据时,它是直接读到缓冲区中的;在写入数据时,它也是写入缓冲区的;任何时候访问NIO中的数据,都是将它放到缓冲区中。

在NIO中,所有的缓冲区类型都继承于抽象类Buffer,最常用的就是ByteBuffer

Buffer的基本原理

在缓冲区中,最重要的属性有下面三个,它们一起合作完成对缓冲区内部状态的变化跟踪

position:指定下一个将要被写入或者读取的元素索引,它的值由get()/put()方法自动更新,在新创建一个Buffer对象时,position被初始化为0。

limit:指定还有多少数据需要取出(在从缓冲区写入通道时),或者还有多少空间可以放入数据(在从通道读入缓冲区时)。

capacity:指定了可以存储在缓冲区中的最大数据容量

缓冲区示意图

缓冲区写入:写入时position右移

缓冲区读取:一是把limit设置为当前的position值。二是把position设置为0。通过position下标从0开始读取,终点为limit。

缓冲区清空:恢复初始状态。

缓冲区的分配

在创建一个缓冲区对象时,会调用静态方法allocate()来指定缓冲区的容量,其实调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xianghan收藏册

极简精品作,一分也是一份鼓励哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值