作者在 2011-12-10 23:02:23 发布以下内容
写字节:
ByteBuffer 的capacity属性决定了它能容纳多少字节,这个属性不能改变。使用绝对put(int index, byte b)方法,可以改变ByteBuffer中任意位置的字节,下标index取值范围为【0,capacity-1】
ByteBuffer 中的字节数据也能通过相对put()方法来设置,该方法会用到缓冲区 position 和 limit 属性,即,该方法会改变缓冲区position处的字节,并把position值增加1。相对put(byte b)方法不能设置下标超过limit的字节数据(不管limit有没有小于capacity)。所以下面条件总是成立: position<=limit<=capcity。下面是一个小例子。
// 创建一个空的容量为10个字节的ByteBuffer对象
ByteBuffer bbuf = ByteBuffer.allocate(10);
// 获得该对象的 capacity 值
int capacity = bbuf.capacity(); // 10
// 使用绝对 put().
// 该方法不会影响到对象的position属性的值
bbuf.put(0,(byte)0xFF); // position=0
// 设置position
bbuf.position(5);
// 使用相对 put(),会影响到position
bbuf.put((byte)0xFF);
// 获得新的position值
int pos = bbuf.position(); // 6
// 获得从position到limit之间的元素数(注意在创建ByteBuffer对象时,limit=capacity,在本例中为10)
int rem = bbuf.remaining(); // 4
// 设置 limit的值
bbuf.limit(7); // remaining=1
// 这个方法可以方便地将 position 置为 0
bbuf.rewind(); // remaining=7
ByteBuffer bbuf = ByteBuffer.allocate(10);
// 获得该对象的 capacity 值
int capacity = bbuf.capacity(); // 10
// 使用绝对 put().
// 该方法不会影响到对象的position属性的值
bbuf.put(0,(byte)0xFF); // position=0
// 设置position
bbuf.position(5);
// 使用相对 put(),会影响到position
bbuf.put((byte)0xFF);
// 获得新的position值
int pos = bbuf.position(); // 6
// 获得从position到limit之间的元素数(注意在创建ByteBuffer对象时,limit=capacity,在本例中为10)
int rem = bbuf.remaining(); // 4
// 设置 limit的值
bbuf.limit(7); // remaining=1
// 这个方法可以方便地将 position 置为 0
bbuf.rewind(); // remaining=7
读字节:
对应于上面每一个put方法,都有一个相应的get方法,这里不多说了。