NIO-ByteBuffer方法学习

/**
 * 创建HeapByteBuffer实例,大小为1024字节
 */
ByteBuffer heapByteBuffer = ByteBuffer.allocate(1024);
/**
 * 创建DirectByteBuffer实例,大小为1024字节
 * 这里的ByteBuffer是DirectByteBuffer,不是HeapByteBuffer.特点是用的内存是堆外内存
 *  减少了复制的时间.该类的个别ByteBuffer的方法无法使用,可以查看源码,如array();
 */
ByteBuffer directByteBuffer = ByteBuffer.allocateDirect(1024);

String msg = "hello world";
/**
 * 往ByteBuffer里放数据
 */
heapByteBuffer.put(msg.getBytes());
/**
 * 取数据
 */
heapByteBuffer.get();
/**
 * 重置了position、limit、mark的值.一般为了下次往ByteBuffer里放数据做准备
 */
heapByteBuffer.clear();
/**
 * ByteBuffer是否还有数据未被读取. 源码就是 通过position < limit 返回一个布尔值
 */
heapByteBuffer.hasRemaining();
/**
 * 本质就是设置position、limit、mark的值.一般为了从ByteBuffer读出数据做准备
 */
heapByteBuffer.flip();
/**
 * 将读过的释放,没读过的复制到数组起始位置,position为未读过的长度,等待继续put.
 * position为未读过的长度.
 * limit为容器大小
 * mark为-1
 */
heapByteBuffer.compact();
/**
 * 就是返回position这个属性
 */
heapByteBuffer.position();
/**
 * 就是返回limit这个属性
 */
heapByteBuffer.limit();
/**
 * 就是返回capacity这个属性
 */
heapByteBuffer.capacity();
/**
 * 返回ByteBuffer里的byte[],往heapByteBuffer放的数据和的读的数据都来自这个byte[]
 * 注意: DirectByteBuffer不适用.
 * 源码里isReadOnly为true或者byte[]为null的使用该方法会抛异常
 */
heapByteBuffer.array();
/**
 * 做标记,就是将现在position的值(索引)赋给mark
 */
heapByteBuffer.mark();
/**
 * 是否是只可读的Buffer
 */
heapByteBuffer.isReadOnly();
/**
 * 是否是DirectByteBuffer
 */
heapByteBuffer.isDirect();
/**
 * 判断是否有byte[]数组,判断依据是(hb != null) && !isReadOnly
 */
heapByteBuffer.hasArray();
/**
 * 本质就是limit - position
 */
heapByteBuffer.remaining();

/**
 * 将position重置到mark的位置
 */
heapByteBuffer.reset();
/**
 * 将position置0,mark置-1
 */
heapByteBuffer.rewind();

你可能感兴趣的:(NIO-ByteBuffer方法学习)