NIO核心一:缓冲区(Buffer)

1、缓冲区(Buffer)

一个用于特定基本数据类 型的容器。由 java.nio 包定义的,所有缓冲区 都是 Buffer 抽象类的子类.。Java NIO 中的 Buffer 主要用于与 NIO 通道进行 交互,数据是从通道读入缓冲区,从缓冲区写入通道中的

javabus网站上不去了 javabuff网站_开发语言

 

Buffer 类及其子类

Buffer 就像一个数组,可以保存多个相同类型的数据。根 据数据类型不同 ,有以下 Buffer 常用子类:

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

上述 Buffer 类 他们都采用相似的方法进行管理数据,只是各自 管理的数据类型不同而已。都是通过如下方法获取一个 Buffer 对象:

static XxxBuffer allocate(int capacity) : 创建一个容量为capacity 的 XxxBuffer 对象

2、缓冲区的基本属性

Buffer 中的重要概念:

  • 容量 (capacity) :作为一个内存块,Buffer具有一定的固定大小,也称为"容量",缓冲区容量不能为负,并且创建后不能更改。
  • 限制 (limit):表示缓冲区中可以操作数据的大小(limit 后数据不能进行读写)。缓冲区的限制不能为负,并且不能大于其容量。 写入模式,限制等于buffer的容量。读取模式下,limit等于写入的数据量。
  • 位置 (position):下一个要读取或写入的数据的索引。缓冲区的位置不能为 负,并且不能大于其限制
  • 标记 (mark)与重置 (reset):标记是一个索引,通过 Buffer 中的 mark() 方法 指定 Buffer 中一个特定的 position,之后可以通过调用 reset() 方法恢复到这 个 position.

标记、位置、限制、容量遵守以下不变式: 0 <= mark <= position <= limit <= capacity

3、Buffer常见方法

Buffer clear() 清空缓冲区并返回对缓冲区的引用

Buffer flip() 为 将缓冲区的界限设置为当前位置,并将当前位置充值为 0

int capacity() 返回 Buffer 的 capacity 大小

boolean hasRemaining() 判断缓冲区中是否还有元素

int limit() 返回 Buffer 的界限(limit) 的位置

Buffer limit(int n) 将设置缓冲区界限为 n, 并返回一个具有新 limit 的缓冲区对象

Buffer mark() 对缓冲区设置标记

int position() 返回缓冲区的当前位置 position

Buffer position(int n) 将设置缓冲区的当前位置为 n , 并返回修改后的 Buffer 对象

int remaining() 返回 position 和 limit 之间的元素个数

Buffer reset() 将位置 position 转到以前设置的 mark 所在的位置

Buffer rewind() 将位置设为为 0, 取消设置的 mark