JavaSE:NIO

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

    

原文地址:https://www.cnblogs.com/JasperZhao/p/14958471.html