【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(),几个指针对应变化:

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

相关推荐
那个松鼠很眼熟w1 小时前
【NIO】3.2 ByteBuffer的原理-AI参考
nio
那个松鼠很眼熟w2 小时前
【NIO】5. FileChannel的基本用法
nio
那个松鼠很眼熟w3 小时前
【NIO】2. ByteBuffer的基本使用
nio
今天的砖头有点烫手啊5 天前
Java IO/NIO/AIO 演进:从 BIO 到 Netty 的底层逻辑
java·jvm·nio
名字还没想好☜23 天前
Java NIO ByteBuffer 实战:flip/clear/compact 三个绕晕人的方法与 position/limit 心智模型
java·开发语言·后端·spring·nio
滕州市燕猫虎计算机科技工作室个体工商户23 天前
java.nio.ByteBuffer的几个常用方法
nio
CodeStats1 个月前
【Java文件IO】Java 文件 IO 体系深度拆解(中):NIO API 详解、Files 与 FileChannel 巅峰对决
java·io·文件·nio·零拷贝·mmap
evans在进步1 个月前
Tomcat NIO 工作原理详解:从 Acceptor、Poller 到容器处理链
java·tomcat·nio
二炮手亮子1 个月前
从 BIO、NIO、AIO 到多路复用与 Netty
策略模式·nio