java中的新io,Buffer基本操作: |
package InAndOut.NewIO;
import java.nio.CharBuffer;
import java.util.concurrent.SynchronousQueue;
//Buffer可以理解为一个容器,他的本质是一个数组
public class BufferTest {
public static void main(String[] args) {
// 创建buffer,CharBuffer,ByteBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,DoubleBuffer,这些buffer都没有提供构造器,要通过下边方法创建一个对象
CharBuffer buff = CharBuffer.allocate(8);//创建了一个容量为8的CharBuffer,
System.out.println("新建的buff的容量为:" + buff.capacity());
System.out.println("新建的buff的界限limit为" + buff.limit());
System.out.println("新建的buff的位置position为:" + buff.position());
// 放入三个元素,放入一个,位置就加1,
buff.put("a");
buff.put("b");
buff.put("c");
System.out.println("加入3元素后的位置position变化:" + buff.position());
// flip后,位置归0,界限为元素个数
//界限:limit:第一个不应该被读出或者写入的缓冲区位置索引。也就是说,位于limit后的数据既不可以被读,也不可以被写
//位置:position:用于致命下一个可以被读出的或者写入的缓冲区位置索引。
buff.flip();
System.out.println("执行flip后的的buff的界限limit是" + buff.limit());
System.out.println("执行flip后的buff的位置position是:" + buff.position());
// 取出元素,执行一次get方法就取出一个元素,取出一个,位置就加一
System.out.println("取出两个元素" + buff.get() + buff.get());
System.out.println("取出两个元素后的位置position是:" + buff.position());
// 下边是调用clear方法:注意clear方法不是清空Buffer的数据,只是将position放置为0,将limit设置为capacity,这样为再次向buff中加入数据做好准备
buff.clear();
System.out.println("clear后的位置position是:" + buff.position());
System.out.println("clear后的界限limit是:" + buff.limit());
System.out.println("clear后的数据:" + buff.get());
}
}
控制台输出为:
新建的buff的容量为:8
新建的buff的界限limit为8
新建的buff的位置position为:0
加入3元素后的位置position变化:3
执行flip后的的buff的界限limit是3
执行flip后的buff的位置position是:0
取出第一个元素ab
取出两个元素后的位置position是:2
clear后的位置position是:0
clear后的界限limit是:8
clear后的数据:a