Buffer代码演示
1. 首先展示一下:创建缓冲区后,核心变量的值是怎么变化的
class Demo02Buffer的核心属性{
main(){ // 创建一个缓冲区 ByteBuffer byteBuffer = ByteBuffer.allocate(1024); // 看一下初始时,4个核心变量的值 System.out.println("初始时-->limit--->"+byteBuffer.limit()); System.out.println("初始时-->position--->"+byteBuffer.position()); System.out.println("初始时-->capacity--->"+byteBuffer.capacity()); System.out.println("初始时-->mark--->" + byteBuffer.mark()); System.out.println("--------------------------------------"); // 添加一些数据到缓冲区中 String s = "JavaEE"; byteBuffer.put(s.getBytes()); // 看一下初始时4个核心变量的值 System.out.println(""put完之后-->limit--->"+byteBuffer.limit()); System.out.println(""put完之后-->position--->"+byteBuffer.position()); System.out.println(""put完之后-->capacity--->"+byteBuffer.capacity()); System.out.println(""put完之后-->mark--->" + byteBuffer.mark()); }
}
运行结果:
2. 现在,我想从缓存区中拿数据,怎么拿呢?
NIO给了我们一个 flip() 方法,可以改动position 和 limit的位置!
还是上面的代码,我们flip()一下后,再看看4个核心属性的值会发生什么变化:
可以看到:
<1> limit变成了position的位置了
<2> 而position变成了0
所以说,当调用完 flip()时:
<1> limit是限制读到哪里,而position是从哪里读
<2> 一般我们称flip()为“切换成读模式”
<3> 每当要从缓存区读取数据时,就调用flip()“切换成读模式”
3. 切换成读模式之后,我们就可以读取缓冲区的数据了
// 创建一个limit()大小的字节数组 (因为就只有limit这个多个数据可读) byte[] bytes = new byte[byteBuffer.limit()]; // 将读取的数据装进bytes数组中 byteBuffer.get(bytes); // 输出数据 System.out.println(new String(bytes, 0, bytes.length )); // 结果:javaEE
4. 随后,输出一下核心变量的值看看:
5. 读完之后,我们还想写数据到缓冲区, 那就使用 clear() 函数, 这个函数会 "清空"缓冲区
其实,数据没有真正被清空,只是被遗忘掉了
6. mark变量示例