一、缓冲区简介
Nio中的 Buffer 是用于存储特定基础类型的一个容器。为了能熟练的使用 Nio中的各种 Buffer , 我们需要理解 Buffer 中的 三个重要 的属性。
1. capacity:表示的是这个缓冲区包含元素的个数,容量不可改变也不可是负数
2. limit:表示的是缓冲区中第一个不可读或写的元素的索引,它不可是负数并且 <= capacity
3. position:表示的是缓冲区中下一个元素可读或可写的元素的索引,它不可是负数并且 <= limit
0 <= position <= limit <= capacity
二、相对操作和绝对操作
相对操作:相对的读或写操作,会根据读取或写入元素的个数会直接修改Buffer 中的 position 的值,比如:buffer.get()
绝对操作:直接根据索引进行操作,不会修改 Buffer 中的 position 的值,比如: buffer.get(索引)。
即:直接根据索引来进行操作的是绝对操作,否则是相对操作。
三、这篇文章中用到的buffer的方法
buffer.put(数据) ===> 向 buffer 中写入数据
buffer.get() ===> 从 buffer 中获取数据
buffer.get(索引) ===> 绝对操作,获取buffer中这个索引所处于的数据,不会修改 `position`的值
buffer.flip() ===> 将 buffer 从写入操作转换成 读取操作
buffer.clear() ===> 将buffer 从读取操作转换成写入操作,`注意:`这个时候buffer中的数据并不会删除,只是修改了 position 、limit、和 mark 的值
四、Buffer 具体操作的实例
四-1、分布详解上图中1 2 3 4各步骤中 position、 limit、和 capacity的变化
1、 分配一个新的 IntBuffer
2、 往 IntBuffer 中写入数据
往buffer中写入数据时,会修改 `position`的值,写入的 `position <= limit`,因为limit为下一个不可读或写元素的索引。
3、 转换成读模式
4、 获取数据
即:
1、容量 `capcaity` 总是不可进行修改的。
2、数据的读取或写入的会修改 `position` 的值,但是不会修改 `limit` 的值 并且 `position <= limit`
3、当写模式变成读模式时需要调用 `flip()`方法
4、`limit` 总是指向缓冲区中的第一个不可读取或写入元素的索引
相关推荐
Java8 中 NIO 缓冲区(Buffer)的数据存储详解 Java8 中的 NIO 缓冲区(Buffer)是 Java 新特性中的一部分,用于存储不同类型的数据。缓冲区可以看作是一个数组,用于存储不同的数据类型,如 byte、char、short、...
1. **缓冲区类型**:Java NIO提供了多种Buffer类型,如ByteBuffer、CharBuffer、IntBuffer、FloatBuffer、DoubleBuffer等,分别对应于不同数据类型。它们都是抽象类`Buffer`的子类。 2. **缓冲区的基本属性**: - ...
尚硅谷_NIO_缓冲区(Buffer)的数据存取 ·03. 尚硅谷_NIO_直接缓冲区与非直接缓冲区 ·04. 尚硅谷_NIO_通道(Channel)的原理与获取 ·05. 尚硅谷_NIO_通道的数据传输与内存映射文件 ·06. 尚硅谷_NIO_分散读取与聚集...
JAVA NIO之Buffer(缓冲区)详解 JAVA NIO之Buffer(缓冲区)是Java NIO中一个重要的概念,它提供了一种高效的数据处理方式。缓冲区是一个可以写入数据然后从中读取数据的内存块,它被包装成NIO Buffer对象,并...
在Java的NIO(New Input/Output)框架中,缓冲区(Buffer)是核心概念之一。本篇文章将深入探讨NIO中的缓冲区特性以及分散/聚集IO操作,这对于理解和优化Java程序的I/O性能至关重要。 缓冲区是NIO中处理数据的主要...
NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector),这些组件协同工作,提升了数据传输的效率。 **通道(Channel)**: 1. **通道基础**:通道是一种从源读取数据到目标写入数据的途径,它...
Java NIO(New Input/Output)是Java提供的一种新的输入输出处理机制,它与传统IO基于流的处理方式不同,NIO支持面向缓冲区的(Buffer-oriented)、基于通道的(Channel-based)I/O操作。在Java NIO中,Buffer类是...
1. 缓冲区(Buffer):NIO的核心组件,用于存储数据。Java提供了多种Buffer类,如ByteBuffer、CharBuffer、IntBuffer等,分别对应不同数据类型。每个Buffer都有特定的方法用于写入、读取、清理和翻转数据。 2. 通道...
- **缓冲区(Buffer)**:缓冲区是 NIO 中的核心概念之一,用于存储不同类型的数据。Buffer 可以看作是一块内存区域,用来存放从通道读取的数据或准备写入通道的数据。 - **通道(Channel)**:通道是 NIO 中另一个重要...
在计算机科学中,缓冲区(Buffer)是一种存储数据的临时区域,它在处理大量数据时起着关键作用。缓冲区分析则是对这些存储区域进行操作和优化的过程,以提高程序性能,减少I/O操作,以及确保数据处理的高效性和正确...
传统的IO基于流(Stream)和缓冲区(Buffer)操作,而NIO的核心在于通道(Channels)和缓冲区(Buffer)。 1. **通道(Channel)**:通道是数据传输的路径,可以想象为水管,它连接到数据源和目的地,如文件、套接字等。Java ...
`buffer.flip()`方法将缓冲区从写模式切换到读模式,这样我们就可以从缓冲区读取数据并写入文件。最后,`channel.write(buffer)`将缓冲区中的数据写入文件,直到缓冲区为空。记得在完成后关闭所有打开的资源。 在...
在Java编程领域,NIO(New Input/Output)是一种用于替代标准IO模型的机制,其核心在于非阻塞的I/O操作和通道(Channel)及缓冲区(Buffer)的使用。传统的IO模型,如描述中的“阻塞I/O”,在读写数据时会一直等待...
标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 Java NIO: Non-blocking IO(非阻塞IO) Java NIO...
01-Java NIO-课程简介....17-Java NIO-Buffer-缓冲区分片.mp4 18-Java NIO-Buffer-只读缓冲区.mp4 19-Java NIO-Buffer-直接缓冲区.mp4 21-Java NIO-Selector-概述.mp4 23-Java NIO-Selector-示例代码(客户端).mp4 24
在写入数据到缓冲区时,Buffer 会跟踪已经写入的数据量。一旦需要读出数据,需要调用 flip() 方法将 Buffer 从写模式转换到读模式。在读模式,Buffer 允许读出之前写入的所有数据。然后,需要清除 Buffer,为下次...
缓冲区是 NIO 的核心组件之一,用于存储数据。Java NIO 提供了多种缓冲区,每种缓冲区对应不同的数据类型: - **ByteBuffer**:用于存储 byte 类型的数据。 - **CharBuffer**:用于存储 char 类型的数据。 - **...
NIO与传统的IO模型(-blocking I/O)不同,传统IO基于缓冲区的读写,而NIO引入了通道(Channels)和缓冲区(Buffers)的概念,以及非阻塞I/O操作,极大地提升了性能。 标题"nio演示代码"表明我们将探讨NIO的实际...
2. **缓冲区(Buffer)**:缓冲区是NIO中数据存储的主要对象,它是内存块的抽象,用于在通道和应用程序之间传输数据。Java NIO提供了多种类型的缓冲区,如ByteBuffer、CharBuffer、IntBuffer、FloatBuffer等,每种...