`

nio之缓冲区(Buffer)理解

阅读更多

 一、缓冲区简介

          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` 总是指向缓冲区中的第一个不可读取或写入元素的索引

 

  • 大小: 109 KB
  • 大小: 15.8 KB
  • 大小: 32.6 KB
  • 大小: 29.4 KB
  • 大小: 37.5 KB
分享到:
评论

相关推荐

    java8中NIO缓冲区(Buffer)的数据存储详解

    Java8 中 NIO 缓冲区(Buffer)的数据存储详解 Java8 中的 NIO 缓冲区(Buffer)是 Java 新特性中的一部分,用于存储不同类型的数据。缓冲区可以看作是一个数组,用于存储不同的数据类型,如 byte、char、short、...

    动态演示nio中的buffer相关操作.zip

    1. **缓冲区类型**:Java NIO提供了多种Buffer类型,如ByteBuffer、CharBuffer、IntBuffer、FloatBuffer、DoubleBuffer等,分别对应于不同数据类型。它们都是抽象类`Buffer`的子类。 2. **缓冲区的基本属性**: - ...

    尚硅谷Java视频_NIO 视频教程

    尚硅谷_NIO_缓冲区(Buffer)的数据存取 ·03. 尚硅谷_NIO_直接缓冲区与非直接缓冲区 ·04. 尚硅谷_NIO_通道(Channel)的原理与获取 ·05. 尚硅谷_NIO_通道的数据传输与内存映射文件 ·06. 尚硅谷_NIO_分散读取与聚集...

    详细了解JAVA NIO之Buffer(缓冲区)

    JAVA NIO之Buffer(缓冲区)详解 JAVA NIO之Buffer(缓冲区)是Java NIO中一个重要的概念,它提供了一种高效的数据处理方式。缓冲区是一个可以写入数据然后从中读取数据的内存块,它被包装成NIO Buffer对象,并...

    NIO学习系列:缓冲区更多特性及分散/聚集IO

    在Java的NIO(New Input/Output)框架中,缓冲区(Buffer)是核心概念之一。本篇文章将深入探讨NIO中的缓冲区特性以及分散/聚集IO操作,这对于理解和优化Java程序的I/O性能至关重要。 缓冲区是NIO中处理数据的主要...

    Java NIO(通道+缓冲区+选择器)

    NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector),这些组件协同工作,提升了数据传输的效率。 **通道(Channel)**: 1. **通道基础**:通道是一种从源读取数据到目标写入数据的途径,它...

    Java NIO 主要类和方法(Java NIO中文版 附录C)

    Java NIO(New Input/Output)是Java提供的一种新的输入输出处理机制,它与传统IO基于流的处理方式不同,NIO支持面向缓冲区的(Buffer-oriented)、基于通道的(Channel-based)I/O操作。在Java NIO中,Buffer类是...

    java nio 读文件

    1. 缓冲区(Buffer):NIO的核心组件,用于存储数据。Java提供了多种Buffer类,如ByteBuffer、CharBuffer、IntBuffer等,分别对应不同数据类型。每个Buffer都有特定的方法用于写入、读取、清理和翻转数据。 2. 通道...

    nio入门 IBM教材,pdf格式

    - **缓冲区(Buffer)**:缓冲区是 NIO 中的核心概念之一,用于存储不同类型的数据。Buffer 可以看作是一块内存区域,用来存放从通道读取的数据或准备写入通道的数据。 - **通道(Channel)**:通道是 NIO 中另一个重要...

    简单的缓冲区分析

    在计算机科学中,缓冲区(Buffer)是一种存储数据的临时区域,它在处理大量数据时起着关键作用。缓冲区分析则是对这些存储区域进行操作和优化的过程,以提高程序性能,减少I/O操作,以及确保数据处理的高效性和正确...

    NIO入门pdf分享

    传统的IO基于流(Stream)和缓冲区(Buffer)操作,而NIO的核心在于通道(Channels)和缓冲区(Buffer)。 1. **通道(Channel)**:通道是数据传输的路径,可以想象为水管,它连接到数据源和目的地,如文件、套接字等。Java ...

    java NIO 写文件

    `buffer.flip()`方法将缓冲区从写模式切换到读模式,这样我们就可以从缓冲区读取数据并写入文件。最后,`channel.write(buffer)`将缓冲区中的数据写入文件,直到缓冲区为空。记得在完成后关闭所有打开的资源。 在...

    深入浅出NIO

    在Java编程领域,NIO(New Input/Output)是一种用于替代标准IO模型的机制,其核心在于非阻塞的I/O操作和通道(Channel)及缓冲区(Buffer)的使用。传统的IO模型,如描述中的“阻塞I/O”,在读写数据时会一直等待...

    java NIO 视频教程

    标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 Java NIO: Non-blocking IO(非阻塞IO) Java NIO...

    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

    Java NIO Buffer过程详解

    在写入数据到缓冲区时,Buffer 会跟踪已经写入的数据量。一旦需要读出数据,需要调用 flip() 方法将 Buffer 从写模式转换到读模式。在读模式,Buffer 允许读出之前写入的所有数据。然后,需要清除 Buffer,为下次...

    javaNIO很好的资料

    缓冲区是 NIO 的核心组件之一,用于存储数据。Java NIO 提供了多种缓冲区,每种缓冲区对应不同的数据类型: - **ByteBuffer**:用于存储 byte 类型的数据。 - **CharBuffer**:用于存储 char 类型的数据。 - **...

    nio演示代码

    NIO与传统的IO模型(-blocking I/O)不同,传统IO基于缓冲区的读写,而NIO引入了通道(Channels)和缓冲区(Buffers)的概念,以及非阻塞I/O操作,极大地提升了性能。 标题"nio演示代码"表明我们将探讨NIO的实际...

    NIO 入门.chm,NIO 入门.chm

    2. **缓冲区(Buffer)**:缓冲区是NIO中数据存储的主要对象,它是内存块的抽象,用于在通道和应用程序之间传输数据。Java NIO提供了多种类型的缓冲区,如ByteBuffer、CharBuffer、IntBuffer、FloatBuffer等,每种...

Global site tag (gtag.js) - Google Analytics