java nio(五)Buffer

Buffer用于和channel进行交互,数据是从channel读入buffer,从buffer写入到channel中的。buffer本质上是一块可以写入数据,然后可以从中读取数据的内存。Buffer的读写示例请移步 java nio(二)FileChannel

Buffer的主要类型

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

Buffer的3个重要属性

capacity

指buffer的容量,当buffer满了,需要将其清空才能继续写数据往里写数据。

position
  • position初始值为0。当向buffer写入数据后, position会向前移动到下一个可插入数据的单元。position最大值为capacity – 1。

  • 当从写数据切换到读取数据时,调用flip方法会将position重置为0。每次读取数据时,position会向前移动到下一个可读的位置。

limit
  • 在向buffer 写入数据时,limit表示最多能往buffer里写多少数据,等于capacity的值。
  • 从buffer读取数据时,limit表示最多能读到多少数据(即buffer写入的所有数据)。等于写数据时的position的值。

Buffer的几个重要方法

flip()方法

将position的值设为0,并将limit的值设置为之前position的值。

rewind()方法

将position的值设为0,limit保持不变。可以通过该方法重读buffer中的所有数据。

mark()与reset()方法

mark()方法可以标记buffer中的一个特定position,通过调用reset()方法可以恢复到这个position。如果我们需要多次调用buffer.get()方法来获取同一position的值,可以先用mark方法进行标记,之后再通过reset方法解除。

clear()与compact()方法
  • 调用clear()方法,position值将被设为0,limit则被设置为 capacity的值,但buffer中的数据并未清除。

  • compact()方法将所有未读的数据复制到buffer起始处,然后将position的值设到最后一个未读元素后面,limit设置为capacity。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值