1. 程式人生 > >JAVA高階基礎(46)---NIO之Buffer常用方法

JAVA高階基礎(46)---NIO之Buffer常用方法

常見實現

  • ByteBuffer
  • CharBuffer
  • ShortBuffer
  • IntBuffer
  • LongBuffer
  • FloatBuffer
  • DoubleBuffer

緩衝區的使用

  1. 建立緩衝區,  分配容量    ByteBuffer  buf  = ByteBuffer.allocate(capacity);
  2. 裝載資料:put();及其過載方法
  3. 改變緩衝區的讀寫模式:flip();
  4. 獲取資料:get();及其過載方法
  5. 標記:mark()/resert();
  6. 判斷

remaining()返回當前位置與限制之間的元素數
hasRemaining()判斷當前位置與限制之間是否還有元素存在
isReadOnly()判斷此緩衝區是否為制度緩衝區
buf.clear();//清空緩衝區 只是將緩衝區的三個屬性恢復到初始狀態   其中的資料依然存在

package org.lanqiao.nio.buffer;

import java.nio.ByteBuffer;

public class BufferDemo {
	public static void main(String[] args) {
		//開闢緩衝區  分配緩衝區
		ByteBuffer buf = ByteBuffer.allocate(1024);
		//存入資料
		buf.put((byte) 2);//1
		buf.putInt(10);//4
		buf.putDouble(12.2);//8
		buf.putChar('太');//2
		buf.putLong(11L);//8
		System.out.println("位置:" + buf.position() +"    限制:" + buf.limit()+"   容量:" + buf.capacity());
		buf.flip();//從寫模式切換為讀模式
		System.out.println(buf.get());
		System.out.println("位置:" + buf.position() +"    限制:" + buf.limit()+"   容量:" + buf.capacity());
		System.out.println(buf.getInt());
		System.out.println("位置:" + buf.position() +"    限制:" + buf.limit()+"   容量:" + buf.capacity());
		System.out.println(buf.getDouble());
		System.out.println("位置:" + buf.position() +"    限制:" + buf.limit()+"   容量:" + buf.capacity());
		buf.mark();
		System.out.println(buf.getChar());
		System.out.println("位置:" + buf.position() +"    限制:" + buf.limit()+"   容量:" + buf.capacity());
		/*buf.reset();
		buf.flip();
		buf.putChar('中');
		buf.flip();
		System.out.println(buf.getChar());*/
		//System.out.println("位置:" + buf.position() +"    限制:" + buf.limit()+"   容量:" + buf.capacity());
		buf.putChar(15,'原');
		System.out.println(buf.getChar());
		System.out.println("位置:" + buf.position() +"    限制:" + buf.limit()+"   容量:" + buf.capacity());
		System.out.println(buf.getInt());
		System.out.println(buf.hasRemaining());
		System.out.println(buf.getChar());
		
		
		
		buf.rewind();
		System.out.println("位置:" + buf.position() +"    限制:" + buf.limit()+"   容量:" + buf.capacity());
		
		buf.clear();//清空緩衝區 只是將緩衝區的三個屬性恢復到初始狀態   其中的資料依然存在
		System.out.println("位置:" + buf.position() +"    限制:" + buf.limit()+"   容量:" + buf.capacity());
		System.out.println(buf.get());
	}
}