【NIO】3.1 ByteBuffer的原理

ByteBuffer的原理

  • [1. ByteBuffer的原理](#1. ByteBuffer的原理)
    • [1.1 ByteBuffer的重要参数(其实是来自父类Buffer)](#1.1 ByteBuffer的重要参数(其实是来自父类Buffer))
    • [1.2 图示说明](#1.2 图示说明)
  • [2. 补充说明](#2. 补充说明)

1. ByteBuffer的原理

1.1 ByteBuffer的重要参数(其实是来自父类Buffer)

private int mark = -1; // 标记位置

private int position = 0; // 当前位置

private int limit; // 限制位置

private int capacity; // 容量

1.2 图示说明

  1. buffer底层维护一个数组,使用allocate(10),相当于分配到长度为10的数组:
    此时buffer是写入模式,只能写数据,不能从中读数据。
  2. 每次channel从文件中读取一个字节,并且存入buffer中,position就向后移动一位:
  3. 使用flip()方法后,表示调整buffer为读模式,此时position和limit的位置会移动:
  4. 读完4个字节后:
  5. 调用clear()方法后,position和limit会恢复到初始的位置,此时buffer被调整为写模式。
    只不过buffer中的数据并没有清除,只是写数据时可以覆盖写。

2. 补充说明

如果数据没有读完,就想切换到写模式,可以调用compact()方法;

比如:只读取了两个数据:

调用compact(),几个指针对应变化:

此时未读的数据,会移动到前面。

相关推荐
lazy H15 天前
【计算机网络】第 15 篇:Java BIO、NIO 与高并发网络通信——从 Socket 理解 I/O 模型
网络·后端·tcp/ip·计算机网络·nio·408
滕州市燕猫虎计算机科技工作室个体工商户20 天前
Java,Java NIO,Java NIO2,Java AIO,AsynchronousServerSocketChannel
java·开发语言·nio·aio·nio2
那个松鼠很眼熟w1 个月前
【NIO】8. Selector多线程
nio
蚰蜒螟1 个月前
从内核启动到 Java NIO:一次 socket accept 的源码串联之旅
java·python·nio
骇客野人1 个月前
Java BIO / NIO / AIO 完整详解 + 编程技巧
java·开发语言·nio
那个松鼠很眼熟w1 个月前
【NIO】4. ByteBuffer的几个重要方法
nio
那个松鼠很眼熟w1 个月前
【NIO】3.2 ByteBuffer的原理-AI参考
nio
那个松鼠很眼熟w1 个月前
【NIO】5. FileChannel的基本用法
nio
那个松鼠很眼熟w1 个月前
【NIO】2. ByteBuffer的基本使用
nio