JavaSE:NIO - Buffer类中的变量(二)

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变量示例

    

 

posted @ 2021-07-01 13:57  Jasper2003  阅读(65)  评论(0编辑  收藏  举报