关于ByteBuffer

来源:互联网 发布:网页菜单制作软件 编辑:程序博客网 时间:2024/05/20 02:29
几种位置和当前指针
起始位置:0
终止位置:capacity
当前位置:position
limit位置:limit

常用方法:
rewind():重新返回起始0位置
position():把当前指针设置到某个位置
capacity():buffer数组的长度,最大值
limit():限制当前buffer数组中可用的位置。如果调用position()方法后的position大于limit,则position设置为limit。调用put类似的方法后,position的位置不能大于limit,否则会抛出java.nio.BufferOverflowException异常
flip():作用是把limit设置到当前的指针(position),然后当前的指针设置到0
clear():将position设置为 0,将limit设置为capacity,但是并不清除实际的数据,只是把标记重置,看起来好像清除了数据

compact():把当前从position位置到limit位置的字节移动到从0开始

package io;import java.nio.ByteBuffer;public class ByteBufferTest {        /**         * @param args         */        public static void main(String[] args) {                // TODO Auto-generated method stub                ByteBuffer bb = ByteBuffer.allocate(10);                v(bb.capacity());//初始的capacity为10                v(bb.limit());//初始的limit为10                                //printBuffer(bb);                v(bb.position());                bb.putChar('a');                v(bb.position()); //因为char类型占两个字节,所以指针指向2                                //bb.limit(2);//如果limit设置为2,调用下句会出现异常                bb.put("asd".getBytes());//放入三个字节数据                                v(bb.position());//position变成5                                bb.flip();                                v(bb.position());//position变成0                v(bb.limit());//limit变成5                                bb.position(1);//把当前位置变成1                bb.compact();//把后面的字节先前移动一个位置                                v(bb.position());//当前的position变为4                v(bb.limit());//limit重置为capacity                                printBuffer(bb);                                bb.clear();                v(bb.position());//当前的position变为0                v(bb.limit());//limit重置为capacity                                                System.exit(0);        }            public static void v(Object o){        System.out.println(o);    }        public static void printBuffer(ByteBuffer buffer){            int p = buffer.position();            buffer.position(0);            for(int i=0;i<buffer.limit();i++){                    v(Integer.toHexString(buffer.get()));            }            buffer.position(p);    }}