让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()

简介: 这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
package nio;

import java.nio.ByteBuffer;

public class BufferTest {
    public static void main(String[] args) throws InterruptedException {
        ByteBuffer buf = ByteBuffer.allocate(9);
        System.out.println("初始capacity = " +buf.capacity());
        System.out.println("初始position = " + buf.position());
        System.out.println("初始limit = " + buf.limit());
        System.out.println("初始mark = " + buf.mark());
        buf.put("123456789".getBytes());
        System.out.println("put写之后的position = " + buf.position());
        System.out.println("put写之后的limit = " + buf.limit());
        System.out.println("put写之后的mark = " + buf.mark());

        buf.flip();//put写之后要flip,将position置为0,将limit置为写入的最后一个元素(待操作的下一个元素)所在的索引位置
        System.out.println("flip之后的position = " + buf.position());
        System.out.println("flip之后的limit = " + buf.limit());
        System.out.println("flip之后的mark = " + buf.mark());

        /*
        while(buf.hasRemaining()){
            System.out.println("#" + (char)buf.get());
        }
        System.out.println("get之后的position = " + buf.position());
        System.out.println("get之后的limit = " + buf.limit());
        System.out.println("get之后的mark = " + buf.mark());
        */

        for(int i = 0 ; i <= 3; i++ ){
            System.out.println("#" + (char)buf.get());
        }
        System.out.println("部分get读之后的position = " + buf.position());

        buf.compact();
        System.out.println("compact之后的position = " + buf.position());
        System.out.println("compact之后的limit = " + buf.limit());
        System.out.println("compact之后的mark = " + buf.mark());

        buf.put("abcd".getBytes());
        buf.flip();
        while(buf.hasRemaining()){
            System.out.println("#" + (char)buf.get());
        }

        buf.clear();
        System.out.println("clear之后的position = " + buf.position());
        System.out.println("clear之后的limit = " + buf.limit());
        System.out.println("clear之后的mark = " + buf.mark());
    }
}
目录
相关文章
|
2天前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
1天前
|
算法 Java API
Java 方法注释:规范、实用和高质量的写法
本文深入探讨了如何编写高质量的 Java 方法注释
21 11
|
1天前
|
SQL Java 数据库连接
【潜意识Java】Java中JDBC过时方法的替代方案以及JDBC为什么过时详细分析
本文介绍了JDBC中一些常见过时方法及其替代方案。
19 5
|
2月前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
32 1
|
6月前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
8月前
|
存储 监控 Java
深入探索Java语言的NIO(New I/O)技术
深入探索Java语言的NIO(New I/O)技术
|
6月前
|
Java
Java中的NIO编程详解
Java中的NIO编程详解
|
6月前
|
Java 大数据
如何在Java中进行网络编程:Socket与NIO
如何在Java中进行网络编程:Socket与NIO
|
6月前
|
Java
Java中的NIO编程详解
Java中的NIO编程详解
|
7月前
|
存储 监控 Java
Java中的NIO编程实践精华
Java中的NIO编程实践精华