常见实现
- ByteBuffer
- CharBuffer
- ShortBuffer
- IntBuffer
- LongBuffer
- FloatBuffer
- DoubleBuffer
缓冲区的使用
- 建立缓冲区, 分配容量 ByteBuffer buf = ByteBuffer.allocate(capacity);
- 装载数据:put();及其重载方法
- 改变缓冲区的读写模式:flip();
- 获取数据:get();及其重载方法
- 标记:mark()/resert();
- 判断
remaining()返回当前位置与限制之间的元素数
hasRemaining()判断当前位置与限制之间是否还有元素存在
isReadOnly()判断此缓冲区是否为制度缓冲区
buf.clear();//清空缓冲区 只是将缓冲区的三个属性恢复到初始状态 其中的数据依然存在
package org.lanqiao.nio.buffer;
import java.nio.ByteBuffer;
public class BufferDemo {
public static void main(String[] args) {
//开辟缓冲区 分配缓冲区
ByteBuffer buf = ByteBuffer.allocate(1024);
//存入数据
buf.put((byte) 2);//1
buf.putInt(10);//4
buf.putDouble(12.2);//8
buf.putChar('太');//2
buf.putLong(11L);//8
System.out.println("位置:" + buf.position() +" 限制:" + buf.limit()+" 容量:" + buf.capacity());
buf.flip();//从写模式切换为读模式
System.out.println(buf.get());
System.out.println("位置:" + buf.position() +" 限制:" + buf.limit()+" 容量:" + buf.capacity());
System.out.println(buf.getInt());
System.out.println("位置:" + buf.position() +" 限制:" + buf.limit()+" 容量:" + buf.capacity());
System.out.println(buf.getDouble());
System.out.println("位置:" + buf.position() +" 限制:" + buf.limit()+" 容量:" + buf.capacity());
buf.mark();
System.out.println(buf.getChar());
System.out.println("位置:" + buf.position() +" 限制:" + buf.limit()+" 容量:" + buf.capacity());
/*buf.reset();
buf.flip();
buf.putChar('中');
buf.flip();
System.out.println(buf.getChar());*/
//System.out.println("位置:" + buf.position() +" 限制:" + buf.limit()+" 容量:" + buf.capacity());
buf.putChar(15,'原');
System.out.println(buf.getChar());
System.out.println("位置:" + buf.position() +" 限制:" + buf.limit()+" 容量:" + buf.capacity());
System.out.println(buf.getInt());
System.out.println(buf.hasRemaining());
System.out.println(buf.getChar());
buf.rewind();
System.out.println("位置:" + buf.position() +" 限制:" + buf.limit()+" 容量:" + buf.capacity());
buf.clear();//清空缓冲区 只是将缓冲区的三个属性恢复到初始状态 其中的数据依然存在
System.out.println("位置:" + buf.position() +" 限制:" + buf.limit()+" 容量:" + buf.capacity());
System.out.println(buf.get());
}
}