【Java nio】buffer

來源:互聯網
上載者:User

標籤:capacity   讀取   san   資料   oid   表示   buffer   blog   double   

  

  1 package com.slp.nio;  2   3 import org.junit.Test;  4   5 import java.nio.ByteBuffer;  6   7 /**  8  * Created by sanglp on 2017/3/1.  9  * 一、緩衝區:在Java nio中負責資料的儲存。緩衝區就是資料,用於村塾不同資料類型的資料 10  * 根據資料類型的不同(boolean類型除外),提供了相應類型的緩衝區 11  * ByteBuffer 12  * CharBuffer 13  * ShortBuffer 14  * IntBuffer 15  * FloatFuffer 16  * DoubleBuffer 17  * 上述緩衝區的管理方式幾乎一致,通過allocate()擷取緩衝區 18  * 二、緩衝區有存取資料的兩個核心方法 19  * put()儲存資料到緩衝區中 20  * get()擷取緩衝區中的資料 21  * 三、緩衝區的四個核心屬性 22  * capacity:容量,表示緩衝區中最大儲存資料的容量,一旦聲明就不能改變 23  * limit:界限   表示緩衝區中可以操作資料的大小 limit後資料不能進行讀寫 24  * position:位置 緩衝區中正在操作資料的位置 25  * mark:標記   表示記錄當前position的位置,可以通過reset()或輔導mark的位置 26  * 0<=mark<=position<=limit<=capacity 27  * 28  * 四、直接緩衝區與非直接緩衝區 29  * 非直接緩衝區:通過allocate()方法分配緩衝區,將緩衝區建立在JVM的記憶體中 30  * 直接緩衝區:通過allocateDirect()方法分配直接緩衝區,將緩衝區建立在實體記憶體中 31  */ 32 public class TestBuffer { 33  34     @Test 35     public void test3(){ 36         ByteBuffer buffer = ByteBuffer.allocateDirect(1024); 37         System.out.println(buffer.isDirect());//true 38     } 39     @Test 40     public void test2(){ 41         String str="asdfgh"; 42         ByteBuffer  buffer = ByteBuffer.allocate(1024); 43         buffer.put(str.getBytes()); 44         buffer.flip(); 45         buffer.get(new byte[buffer.limit()],0,2); 46         System.out.println(new String(new byte[buffer.limit()],0,2)); 47         System.out.println(buffer.position());//2 48         //標記 49         buffer.mark(); 50         buffer.get(new byte[buffer.limit()],2,2); 51         System.out.println(new String(new byte[buffer.limit()],2,2)); 52         System.out.println(buffer.position());//4 53         //reset()恢複到mark的位置 54         buffer.reset(); 55         System.out.println(buffer.position());//2 56         //判斷緩衝區中對否有 57         if(buffer.hasRemaining()){ 58             System.out.println(buffer.remaining());//4 59         } 60     } 61  62     @org.junit.Test 63     public void test(){ 64         String str="ABCDE"; 65         //1、分配一個指定大小的緩衝區 66         ByteBuffer buf = ByteBuffer.allocate(1024); 67         System.out.println(buf.position());//0 68         System.out.println(buf.limit());//1024 69         System.out.println(buf.capacity());//1024 70        //2、利用put()存入資料到緩衝區 71         buf.put(str.getBytes()); 72         System.out.println(buf.position());//5 73         System.out.println(buf.limit());//1024 74         System.out.println(buf.capacity());//1024 75         //3、切換為讀取資料的模式 76         buf.flip(); 77         System.out.println(buf.position());//0 78         System.out.println(buf.limit());//5 79         System.out.println(buf.capacity());//1024 80         //4、讀取緩衝區中的資料 81         byte [] dest = new byte[buf.limit()]; 82         buf.get(dest); 83         System.out.println(new String(dest,0,dest.length));//ABCDE 84         System.out.println(buf.position());//5 85         System.out.println(buf.limit());//5 86         System.out.println(buf.capacity());//1024 87  88         //5。rewind()可重複讀資料 89         buf.rewind(); 90         System.out.println(buf.position());//0 91         System.out.println(buf.limit());//5 92         System.out.println(buf.capacity());//1024 93         //6、清空緩衝區 但是緩衝區中的資料依然存在,但是處於被遺忘狀態 94         buf.clear(); 95         System.out.println(buf.position());//0 96         System.out.println(buf.limit());//1024 97         System.out.println(buf.capacity());//1024 98         System.out.println((char)buf.get());//A 99     }100 }

 

【Java nio】buffer

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.