天天看點

Java NIO Buffer詳解

一、ByteBuffer類型化的put與get方法

/**      * ByteBuffer類型化的put與get方法      */     public class NioTest5 {         public static void main(String[] args) {             ByteBuffer buffer = ByteBuffer.allocate(64);             buffer.putInt(5);             buffer.putLong(500000000L);             buffer.putDouble(13.456);             buffer.putChar('你');             buffer.putShort((short) 3);             buffer.flip();             System.out.println(buffer.getInt());             System.out.println(buffer.getLong());             System.out.println(buffer.getDouble());             System.out.println(buffer.getChar());             System.out.println(buffer.getShort());         }     }      

  put和get的類型要一緻。如第一個是putInt, 輸出的使用第一個要用getInt。

二、Slice Buffer

/**      * Slice Buffer和原Buffer共享底層數組,任一一個改變,另外一個也會改變      */     public class NioTest6 {         public static void main(String[] args) {             ByteBuffer buffer = ByteBuffer.allocate(10);             for(int i = 0; i < buffer.capacity(); ++i){                 buffer.put((byte)i);             }             buffer.position(2);             buffer.limit(6);             ByteBuffer sliceBuffer = buffer.slice();             for(int i = 0; i < sliceBuffer.capacity(); ++i){                 byte b = sliceBuffer.get(i);                 b *= 2;                 sliceBuffer.put(i,  b);             }             buffer.position(0);             buffer.limit(buffer.capacity());            while (buffer.hasRemaining()){                System.out.println(buffer.get());            }         }     }      

  

三、隻讀Buffer

/**      * 隻讀buffer,我們可以随時将一個普通Buffer調用asReadOnlyBuffer方法傳回一個隻讀Buffer      * 但不能将一個隻讀Buffer轉換為讀寫Buffer      */     public class NioTest7 {         public static void main(String[] args) {             ByteBuffer buffer = ByteBuffer.allocate(10);             System.out.println(buffer.getClass());             for(int i = 0; i < buffer.capacity(); ++i){                 buffer.put((byte)i);             }             ByteBuffer readonlyBuffer = buffer.asReadOnlyBuffer();             System.out.println(readonlyBuffer.getClass());             readonlyBuffer.position(0);             readonlyBuffer.put((byte)2);         }     }      

  對隻讀Buffer進行修改,将抛出異常

Java NIO Buffer詳解