NIO中两个核心对象为Channel(通道)和Buffer(缓冲)
Buffer,ByteBuffer,CharBuffer,DoubleBuffer,FloatBuffer,IntBuffer,LongBuffer,ShortBuffer,MappedByteBuffer(ByteBuffer的子类)
实例化Buffer的方法(MappedByteBuffer除外):
- ByteBuffer bb = ByteBuffer.allocate(capacity);
ByteBuffer bb = ByteBuffer.allocate(capacity);capacity为缓冲区容量。
对Buffer属性的一系列操作:
- public static void BufferTest() {
- //创建普通的buffer
- ByteBuffer bb = ByteBuffer.allocate(8);
- //创建直接buffer和普通buffer对比是创建成本高,I/O操作较快
- ByteBuffer bb2 = ByteBuffer.allocateDirect(8);
- //buffer的三属性 关系为 容量cap>=界限lim>=位置pos
- //容量
- bb.capacity();
- //界限
- bb.limit();
- //位置
- bb.position();
- /*
- * 向普通buffer中存入元素,position随添加的元素而增涨初始为0
- * pos=0 lim=8 cap=8
- */
- bb.put((byte) 'a');
- bb.put((byte) 'b');
- /*
- * pos=2 lim=8 cap=8
- * buffer为非空调用flip()为输出做准备
- * 执行flip()后 limit指到有效长度position指到0的位置
- */
- bb.flip();
- /*
- * pos=0 lim=2 cap=8
- * 输出数据结束后调用clear()为下次输入做准备
- * 执行clear()后 limit指到capacity位置position指到0位置
- */
- bb.clear();
- /*
- * pos=0 lim=8 cap=8
- * 如果再添加c元素到buffer 这时的position应该向后+1,并且覆盖掉原来的a
- */
- bb.put((byte) 'c');
- //pos=1 lim=8 cap=8
- }