BufferDemo.java 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package cn.hhj.nio.buffer;
  2. import java.io.FileInputStream;
  3. import java.nio.*;
  4. import java.nio.channels.*;
  5. public class BufferDemo {
  6. //put/get
  7. public static void main(String args[]) throws Exception {
  8. //这用用的是文件IO处理
  9. FileInputStream fin = new FileInputStream("E://test.txt");
  10. //创建文件的操作管道
  11. FileChannel fc = fin.getChannel();
  12. //分配一个10个大小缓冲区,说白了就是分配一个10个大小的byte数组
  13. ByteBuffer buffer = ByteBuffer.allocate(10);
  14. output("初始化", buffer);
  15. //先读一下
  16. fc.read(buffer);
  17. output("调用read()", buffer);
  18. //准备操作之前,先锁定操作范围
  19. buffer.flip();
  20. output("调用flip()", buffer);
  21. //判断有没有可读数据
  22. while (buffer.remaining() > 0) {
  23. byte b = buffer.get();
  24. // System.out.print(((char)b));
  25. }
  26. output("调用get()", buffer);
  27. //可以理解为解锁
  28. buffer.clear();
  29. output("调用clear()", buffer);
  30. //最后把管道关闭
  31. fin.close();
  32. }
  33. //把这个缓冲里面实时状态给答应出来
  34. public static void output(String step, ByteBuffer buffer) {
  35. System.out.println(step + " : ");
  36. //容量,数组大小
  37. System.out.print("capacity: " + buffer.capacity() + ", ");
  38. //当前操作数据所在的位置,也可以叫做游标
  39. System.out.print("position: " + buffer.position() + ", ");
  40. //锁定值,flip,数据操作范围索引只能在position - limit 之间
  41. System.out.println("limit: " + buffer.limit());
  42. System.out.println();
  43. }
  44. }