一、缓冲区简介

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

nio之缓冲区(Buffer)理解的更多相关文章

  1. NIO之缓冲区(Buffer)的数据存取

    缓冲区(Buffer) 一个用于特定基本数据类行的容器.有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类. Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通道 ...

  2. Java NIO之缓冲区Buffer

    Java NIO的核心部件: Buffer Channel Selector Buffer 是一个数组,但具有内部状态.如下4个索引: capacity:总容量 position:下一个要读取/写入的 ...

  3. Java NIO流 -- 缓冲区(Buffer,ByteBuffer)

    用来定义缓冲区的所有类都以Buffer类为基类,Buffer定义了缓冲区的基本特征. 直接子类: ByteBuffer 用来存储byte类型的缓冲区,可以在这种缓冲区中存储任意其他基本类型的二进制值( ...

  4. JAVA NIO缓冲区(Buffer)------ByteBuffer常用方法

    参考:https://blog.csdn.net/xialong_927/article/details/81044759 缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I ...

  5. NIO(一)——缓冲区Buffer

                                        NIO(一)--Buffer NIO简介 NIO即New IO,是用来代替标准IO的,提供了与标准IO完全不同传输方式. 核心: ...

  6. Java NIO -- 缓冲区(Buffer)的数据存取

    缓冲区(Buffer): 一个用于特定基本数据类型的容器.由 java.nio 包定义的,所有缓冲区都是 Buffer 抽象类的子类.Java NIO 中的 Buffer 主要用于与 NIO 通道进行 ...

  7. NIO的缓冲区、通道、选择器关系理解

    Buffer的数据存取    一个用于特定基本数据类行的容器.有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类.   Java NIO中的Buffer主要用于与NIO通道进行交互,数 ...

  8. NIO(一):Buffer缓冲区

    一.NIO与IO: IO:  一般泛指进行input/output操作(读写操作),Java IO其核心是字符流(inputstream/outputstream)和字节流(reader/writer ...

  9. Java NIO 缓冲区 Buffer

    缓冲区 Buffer 是 Java NIO 中一个核心概念,它是一个线性结构,容量有限,存放原始类型数据(boolean 除外)的容器. 1. Buffer 中可以存放的数据类型 java.nio.B ...

随机推荐

  1. 2021.9.12周六PAT甲级考试复盘与总结

    周六PAT甲级考试复盘与总结 先说结论:仍未步入"高手"行列:现在的学习节奏与方法是对的,有十万分的必要坚持下去. 题目 知识点 分数 T1 前缀和.二分 11 / 20 T2 排 ...

  2. Stream流思想和常用方法

    一.IO流用于读写:Stream流用于处理数组和集合数据: 1.传统集合遍历: 2.使用Stream流的方式过滤: 其中,链式编程(返回值就是对象自己)中,filter使用的是Predicate函数式 ...

  3. Spring5(六)——AspectJ(xml)

    一.AspectJ 1.介绍 AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,也可以说 AspectJ 是一个基于 Java 语言的 AOP 框架.通常我们在 ...

  4. Windows环境下实现WireShark抓取HTTPS

    https 加密传输,Wireshark 没有设置的情况下是没有办法抓到包的 https 的数据包. 设置系统环境变量(SSLKEYLOGFILE) WireShark 设置 SSL 选项 参考文章: ...

  5. LR进行内外网附件上传并发——实践心得

    刚开始接触LR的时候,做了一次内外网附件上传的并发测试,比较简单,但当时理解有些欠缺.以下为当时的实践心得: 1.分内外网测试的意义: 内网测试主要看负载压力情况等,外网测试主要考虑网络带宽.网络延时 ...

  6. 『GoLang』反射

    方法和类型的反射 反射是应用程序检查其所拥有的结构,尤其是类型的一种能.每种语言的反射模型都不同,并且有些语言根本不支持反射.Go语言实现了反射,反射机制就是在运行时动态调用对象的方法和属性,即可从运 ...

  7. CVE-2012-0158 漏洞分析报告

      Office 2003 sp3(CVE-2012-0158)漏洞分析报告   软件名称:Office 2003 sp3 软件版本:2.0 漏洞模块:MSCOMCTL.ocx 模块版本:2.0.0. ...

  8. 分享一下我的Python自学历程,分享下我自己学习方法

    其实关于编程这事儿没有接触的那么早,大一的时候没什么关注点,有一门课是vb,一天天的,就抄抄作业啥的就完事儿了.当时也觉的自己不是学编程的料,想着以后估摸也不会干开发相关的工作. 我的自学历程 阴差阳 ...

  9. isnull与ifnull适用数据库

    根据业务流程去查询某个数据表的某个字段的最大值: 直接用的select max(code) from base_area; 大多数情况没有问题,有个特殊点:如果数据表里边没有数据,且返回类型时int时 ...

  10. CAS邮箱的Express配置

    Configuration for all clients: http://help.cstnet.cn/changjianwenti/youjianshoufa/kehuduan.htm Confi ...