標籤: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