NIO的ByteBuffer的几个方法的理解(对理解MINA的使用有帮助).
理解了这个。相信对于MINA的二次开发有相当大的帮助
import java.nio.ByteBuffer;
/****
*
* @author ADMIN
* 测试缓冲区的几个方法,对于理解缓冲区使用原理有相当大的帮助
*/
public class NioBufferTest {
public static void main(String args[]){
//分配字节缓冲区,分配10个
ByteBuffer bb=ByteBuffer.allocate(10);
//迭代bb,字节缓冲区ByteBuffer。然后依次在缓冲区里面放字节1-9的字节
for(int i=1;i<9;i++){
bb.put((byte)i);
}
//返回缓冲区的位置。因为前面存了8个数。所以应该在第8个缓冲区
System.out.println(“pos:”+bb.position());
//表示buff中不可被读取的位置。缓冲区的停止位
System.out.println(“limit:”+bb.limit());
//反回缓冲区的容量。我们分配了10个缓冲区
System.out.println(“cap:”+bb.capacity());
//反转此缓冲区
bb.flip();
/*
* 反转后的结果如上面的解释
*/
System.out.println(“\nafter flip”);
System.out.println(“pos:”+bb.position());
System.out.println(“limit:”+bb.limit());
System.out.println(“cap:”+bb.capacity());
//在此缓冲区的位置设置标记
bb.mark();
System.out.println(“\nafter mark”);
System.out.println(“pos:”+bb.position());
System.out.println(“limit:”+bb.limit());
System.out.println(“cap:”+bb.capacity());
//将缓冲区的位置设置成以前标记的位置
bb.reset();
System.out.println(“\nafter reset”);
System.out.println(“pos:”+bb.position());
System.out.println(“limit:”+bb.limit());
System.out.println(“cap:”+bb.capacity());
//清除缓冲区
bb.clear();
System.out.println(“\nafter clear”);
System.out.println(“pos:”+bb.position());
System.out.println(“limit:”+bb.limit());
System.out.println(“cap:”+bb.capacity());
//设置只有一个位可以存放,所以存放10时就会报错。
bb.limit(1);
bb.put((byte)9);
bb.put((byte)10);//超出limit范围,抛出java.nio.BufferOverflowException异常
bb.put((byte)11);
}
}
转载地址:http://hi.baidu.com/qinghua9/blog/item/d793232ead9f17584fc22696.html