【超详细解释】从Java NIO到Netty的每一步 (三)

Java NIO组件介绍

Buffer

从第一章我们了解到Channel和Buffer可以互相读写,其本质是是一块可以写入数据,然后可以从中读取数据的内存。要了解其原理,首先需要知道三个属性:

  • capacity:Buffer的规模大小
  • position:写模式下,position表示当前的位置,写入一个数据后,position就移动到下一个Buffer单元;当Buffer从写模式切换到读模式,position会被重置为0.
    当从Buffer的position处读取数据时,position向前移动到下一个可读的位置
  • limit:在写模式下,Buffer的limit表示你最多能往Buffer里写多少数据,所以等于Buffer的capacity;当切换到读模式时,
    limit表示你最多能读到多少数据

配图说明:

1.Buffer类型

  • ByteBuffer
  • MappedByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

2.分配一个Buffer

ByteBuffer buf = ByteBuffer.allocate(48);

3.向Buffer中写入数据

int bytesRead = inChannel.read(buf); 

使用put()方法

buf.put(127);

4.翻转操作:flip()

flip()是切换Buffer的读模式和写模式

5.从Buffer读取数据

int bytesWritten = inChannel.write(buf);

使用get()方法

byte aByte = buf.get();

6.clear()和compact()方法

前提:一旦读完Buffer中的数据,需要让Buffer准备好再次被写入。可以通过clear()或compact()方法来完成。
区别:clear()会将position置为0,limit置为capacity,换句话说Buffer被清空了;如果Buffer中仍有未读的数据,切后续还需要,这时候想先写数据,就用compact(),compact()将所有未读的数据拷贝到Buffer起始处。然后将position设到最后一个未读元素正后面。limit属性依然像clear()方法一样,设置成capacity。

关注我日常更新分享Java编程技术!希望大家都能早日走上人生巅峰!

【领取资料】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

牛战士从不脱下面具

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值