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` 总是指向缓冲区中的第一个不可读取或写入元素的索引
nio之缓冲区(Buffer)理解的更多相关文章
- NIO之缓冲区(Buffer)的数据存取
缓冲区(Buffer) 一个用于特定基本数据类行的容器.有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类. Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通道 ...
- Java NIO之缓冲区Buffer
Java NIO的核心部件: Buffer Channel Selector Buffer 是一个数组,但具有内部状态.如下4个索引: capacity:总容量 position:下一个要读取/写入的 ...
- Java NIO流 -- 缓冲区(Buffer,ByteBuffer)
用来定义缓冲区的所有类都以Buffer类为基类,Buffer定义了缓冲区的基本特征. 直接子类: ByteBuffer 用来存储byte类型的缓冲区,可以在这种缓冲区中存储任意其他基本类型的二进制值( ...
- JAVA NIO缓冲区(Buffer)------ByteBuffer常用方法
参考:https://blog.csdn.net/xialong_927/article/details/81044759 缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I ...
- NIO(一)——缓冲区Buffer
NIO(一)--Buffer NIO简介 NIO即New IO,是用来代替标准IO的,提供了与标准IO完全不同传输方式. 核心: ...
- Java NIO -- 缓冲区(Buffer)的数据存取
缓冲区(Buffer): 一个用于特定基本数据类型的容器.由 java.nio 包定义的,所有缓冲区都是 Buffer 抽象类的子类.Java NIO 中的 Buffer 主要用于与 NIO 通道进行 ...
- NIO的缓冲区、通道、选择器关系理解
Buffer的数据存取 一个用于特定基本数据类行的容器.有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类. Java NIO中的Buffer主要用于与NIO通道进行交互,数 ...
- NIO(一):Buffer缓冲区
一.NIO与IO: IO: 一般泛指进行input/output操作(读写操作),Java IO其核心是字符流(inputstream/outputstream)和字节流(reader/writer ...
- Java NIO 缓冲区 Buffer
缓冲区 Buffer 是 Java NIO 中一个核心概念,它是一个线性结构,容量有限,存放原始类型数据(boolean 除外)的容器. 1. Buffer 中可以存放的数据类型 java.nio.B ...
随机推荐
- Spring MVC拦截器浅析
Spring MVC拦截器 重点:Spring MVC的拦截器只会拦截控制器的请求,如果是jsp.js.image.html则会放行. 什么是拦截器 运行在服务器的程序,先于Servlet或JSP之前 ...
- 转:C#读取PDF、TXT内容
//读取PDF内容 private void button2_Click(object sender, EventArgs e) { label3.Text = OnCreated("D:\ ...
- EL-ADMIN学习笔记
一,支持接口限流,避免恶意请求导致服务层压力过大 常见的限流功能一般有两个关注点: 1.限流原则,即以什么样的条件对请求进行识别以及放行.常见的作法是给予每个调用API的系统不同的唯一编码,用于监控某 ...
- rune和byte在处理字符/字符串中的应用.
rune和byte在处理字符/字符串中的应用. 定义: rune是int32的别名,-2147483648->2147483647,常用来表示UNICODE字符集,可以用来处理包含中文/非中文的 ...
- k8s核心资源之namespace与pod污点容忍度生命周期进阶篇(四)
目录 1.命名空间namespace 1.1 什么是命名空间? 1.2 namespace应用场景 1.3 namespacs常用指令 1.4 namespace资源限额 2.标签 2.1 什么是标签 ...
- 通过Kubernetes监控探索应用架构,发现预期外的流量
大家好,我是阿里云云原生应用平台的炎寻,很高兴能和大家一起在 Kubernetes 监控系列公开课上进行交流.本次公开课期望能够给大家在 Kubernetes 容器化环境中快速发现和定位问题带来新的解 ...
- Spring Cloud Hystrix 学习(三)请求合并
什么是请求合并?我们先来看两张图: 上方的两张图中,第二张可以看出服务端只执行了一次响应,这就是请求合并.客户端新增的请求合并模块,内部存在一个等待的时间窗口,将一定时间段内满足条件的请求进行合并,以 ...
- 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main | 百篇博客分析OpenHarmony源码 | v51.04
百篇博客系列篇.本篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main | 51.c.h.o 加载运行相关篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | ...
- Markdown学习 Day 001
Markdown学习 Day 001 快速标题 "#" + "空格" + "标题内容",回车即可,PS. "#"数量n代 ...
- SpringMVC的数据输出
使用 @Controller public class OutputController { @RequestMapping("/handle01") public String ...