java新输入/输出(nio)记录

 NIO中两个核心对象为Channel(通道)和Buffer(缓冲)

Buffer,ByteBuffer,CharBuffer,DoubleBuffer,FloatBuffer,IntBuffer,LongBuffer,ShortBuffer,MappedByteBuffer(ByteBuffer的子类)

实例化Buffer的方法(MappedByteBuffer除外):

Java代码 复制代码 收藏代码
  1. ByteBuffer bb = ByteBuffer.allocate(capacity);
ByteBuffer bb = ByteBuffer.allocate(capacity);


capacity为缓冲区容量。

对Buffer属性的一系列操作:

Java代码 复制代码 收藏代码
  1. public static void BufferTest() {
  2. //创建普通的buffer
  3. ByteBuffer bb = ByteBuffer.allocate(8);
  4. //创建直接buffer和普通buffer对比是创建成本高,I/O操作较快
  5. ByteBuffer bb2 = ByteBuffer.allocateDirect(8);
  6. //buffer的三属性 关系为 容量cap>=界限lim>=位置pos
  7. //容量
  8. bb.capacity();
  9. //界限
  10. bb.limit();
  11. //位置
  12. bb.position();
  13. /*
  14. * 向普通buffer中存入元素,position随添加的元素而增涨初始为0
  15. * pos=0 lim=8 cap=8
  16. */
  17. bb.put((byte) 'a');
  18. bb.put((byte) 'b');
  19. /*
  20. * pos=2 lim=8 cap=8
  21. * buffer为非空调用flip()为输出做准备
  22. * 执行flip()后 limit指到有效长度position指到0的位置
  23. */
  24. bb.flip();
  25. /*
  26. * pos=0 lim=2 cap=8
  27. * 输出数据结束后调用clear()为下次输入做准备
  28. * 执行clear()后 limit指到capacity位置position指到0位置
  29. */
  30. bb.clear();
  31. /*
  32. * pos=0 lim=8 cap=8
  33. * 如果再添加c元素到buffer 这时的position应该向后+1,并且覆盖掉原来的a
  34. */
  35. bb.put((byte) 'c');
  36. //pos=1 lim=8 cap=8
  37. }  

你可能感兴趣的:(java,记录)