zoukankan      html  css  js  c++  java
  • 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变量示例

        

  • 相关阅读:
    java synchronized
    Java多线程的常见例子
    List,ArrayList
    BufferedInputStream与BufferedOutputStream
    super,this
    ServletConfig与ServletContext
    [转] 编写高效的 CSS 选择器
    浏览器是怎样工作的:渲染引擎,HTML解析
    sublime插件insertDate显示ISO时间
    《十日谈》摘要1
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/14958471.html
Copyright © 2011-2022 走看看