缓冲区(Buffer)
- 简介
缓冲区(Buffer):缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象(含数组),该对象提供了一组方法,可以更轻松地使用内存块,
缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。Channel 提供从文件、网络读取数据的渠道,但是读取或写入的数据都必须经由 Buffe
- 在 NIO 中,Buffer 是一个顶层父类,它是一个抽象类, 类的层级关系图
1) ByteBuffer,存储字节数据到缓冲区
2) ShortBuffer,存储字符串数据到缓冲区
3) CharBuffer,存储字符数据到缓冲区
4) IntBuffer,存储整数数据到缓冲区
5) LongBuffer,存储长整型数据到缓冲区
6) DoubleBuffer,存储小数到缓冲区
7) FloatBuffer,存储小数到缓冲区
-
Buffer类定义了所有的缓冲区都具有的四个属性来提供关于其所包含的数据元素的信息:
-
debug如下代码
public class BasicBuffer {
public static void main(String[] args) {
//举例说明 Buffer 的使用(简单说明)
//创建一个 Buffer,大小为 5,即可以存放 5 个 int
IntBuffer intBuffer = IntBuffer.allocate(5);
//向buffer存放数据
for (int i = 0; i < intBuffer.capacity(); i++) {
intBuffer.put(i * 2);
}
//如何从 buffer 读取数据
//将 buffer 转换,读写切换(!!!)
intBuffer.flip();
while (intBuffer.hasRemaining()) {
System.out.println(intBuffer.get());
}
}
}
-
初始值如下
-
执行反转操作后
# 反转方法的源码为
public Buffer flip() {
limit = position;
position = 0;
mark = -1;
return this;
}
-
如果在执行反转操作后指定值,则只能读取到索引为1,2的值
-
Buffer类相关方法
-
最常用的是ByteBuffer 类(二进制数据),该类的主要方法如下