【Java 网络编程】NIO Buffer 简介 ( 概念 | 数据传输 | 标记 | 位置 | 限制 | 容量 | 标记 | 重置 | 清除 | 翻转 | 重绕 | 链式操作 )

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 【Java 网络编程】NIO Buffer 简介 ( 概念 | 数据传输 | 标记 | 位置 | 限制 | 容量 | 标记 | 重置 | 清除 | 翻转 | 重绕 | 链式操作 )

文章目录

I. Buffer 简介

II. Buffer 属性

III. Buffer 数据读写

IV. Buffer 标记 mark() 和重置 reset()

V. Buffer 清除 翻转 重绕

VI. Buffer 缓冲区只读属性

VII. Buffer 的链式调用



I. Buffer 简介


Buffer 是在 NIO 中定义的抽象类 , 其针对七种基本数据类型都有对应的实现类 , 如 ByteBuffer , CharBuffer , DoubleBuffer , FloatBuffer , IntBuffer , LongBuffer , ShortBuffer ; 其是用于缓存基本数据类型的容器 ;


Buffer 作用 : 在内存中创建指定大小的空间 , 对一些基本类型数据进行缓存 ; 使用缓存能减少读写磁盘的次数 , 这块缓存所占用的内存会一直使用 , 减少了动态内存分配的开销 ;




II. Buffer 属性


Buffer 缓冲区基本属性 :


① 容量 Capacity : 缓冲区元素个数 , 不可更改 ;

② 限制 Limit : 缓冲区的终点 , 从该索引开始 ( 包含该索引 ) , 不能对之后的元素进行读写操作 ; Limit 值可以修改 , 其值必须是自然数 ;

③ 位置 Position : 下一个要被读取或写入的元素索引 , 注意是下一个 , Position 初始值从 0 开始计数 , 如果没有读取就一直是 0 , 如果已经读取了 1 个元素 , 其 Position 值在读取完毕后变为 1 , 指向下一个将要读取的元素 ;

④ 标记 Mark : 调用 mark() 方法可以设置标记 Mark = Position , 之后在任何时刻 , 调用 reset() 方法 , 可以让 Position = Mark ;

四个属性遵循的规律 : M a r k ≤ P o s i t i o n ≤ L i m i t ≤ C a p a c i t y Mark \leq Position \leq Limit \leq CapacityMark≤Position≤Limit≤Capacity




III. Buffer 数据读写


1. Buffer 的 7 个子类 ( ByteBuffer , CharBuffer , DoubleBuffer , FloatBuffer , IntBuffer , LongBuffer , ShortBuffer ) , 都定义了两类方法 , 分别是 ① 读取数据 , ② 写入数据 ;



2. 相对操作和绝对操作 :


① 相对操作读写数据 : 缓冲区相对操作读取或写入数据 , 操作完毕后 , Position 被赋值为下一个将要读取或写入的元素索引 , 如果操作的 Position 超出了 Limit , 就会抛出异常 ;

② 绝对操作读写数据 : 直接使用元素索引进行操作 , 该操作不影响 Position 位置属性 ; 如果索引超出了缓冲区大小 , 就会抛出异常 ;



IV. Buffer 标记 mark() 和重置 reset()


标记和重置方法 :


① 操作对象 : 标记 mark() 方法 操作的是 Mark 标记属性 , 重置 reset() 方法 , 主要用于操作 Position 位置属性 ;

② 设置标记 : mark() 方法用于设置标记 , 将当前的 Position 赋值给 Mark 属性 ;

③ 位置重置 : reset() 方法用于重置 Position 位置属性 , 将当前的 Position 位置属性设置成 Mark 标记属性值 ;



V. Buffer 清除 翻转 重绕


1. 清除操作 : 调用 clear() 方法执行 , 执行了该方法后 , 将 Limit 限制属性设置为缓冲区的容量大小 , 将 Position 位置属性设置成 0 , 之后便可以重新从 0 位置开始读写缓冲区 ;


2. 翻转操作 : 调用 flip() 方法执行 , 执行了该方法后 , 将 Limit 限制属性设置为当前 Position 位置属性, 将 Position 位置属性设置成 0 , 之后便可以重新从 0 位置开始读写缓冲区 , 但是不能超过 Limit 位置 ;


3. 重绕操作 : 调用 rewind() 方法执行 , Limit 限制属性保持不变 , 将 Position 位置属性设置成 0 , 只是重新开始写入或读取 ;




VI. Buffer 缓冲区只读属性


Buffer 只读缓冲区 :


① 只读属性 : Buffer 包裹的缓冲区可能是只读的 , 不能向缓冲区中写入数据 ;

② 只读缓冲区操作 : 只读缓冲区的内容是不可以修改的 , 但是缓冲区的 Mark 标记 , Limit 限制 , Position 位置属性是可以改变的 , 缓冲区是只读的 , 不可改变缓冲区及其内容 , 因此 Capacity 容量不可改变 ;

③ 判定是否是只读缓冲区 : 可以调用 isReadOnly() 方法 , 判定该 Buffer 缓冲区是否是制度缓冲区 ;



VII. Buffer 的链式调用


1. 链式调用前提 : Buffer 缓冲区有很多方法的返回值是 Buffer 对象本身 , 如 :


① Buffer clear() 清除缓冲区 ,

② Buffer flip() 翻转缓冲区 ,

③ Buffer limit(int newLimit) 设置缓冲区限制 ,

④ Buffer mark() 设置缓冲区标记 ,

⑤ Buffer position(int newPosition) 设置缓冲区位置 ,

⑥ Buffer reset() 重置缓冲区位置 ,

⑦ Buffer rewind() 缓冲区重绕 ;

2.链式调用示例 :


① 非链式调用 :

ByteBuffer buffer = ByteBuffer.allocate(10) ;
buffer.position(3);
buffer.rewind();
buffer.limit(9);


② 链式调用 :

ByteBuffer buffer = ByteBuffer.allocate(10) ;
buffer.position(3).rewind().limit(9);


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
目录
相关文章
|
3月前
|
机器学习/深度学习 人工智能
类人神经网络再进一步!DeepMind最新50页论文提出AligNet框架:用层次化视觉概念对齐人类
【10月更文挑战第18天】这篇论文提出了一种名为AligNet的框架,旨在通过将人类知识注入神经网络来解决其与人类认知的不匹配问题。AligNet通过训练教师模型模仿人类判断,并将人类化的结构和知识转移至预训练的视觉模型中,从而提高模型在多种任务上的泛化能力和稳健性。实验结果表明,人类对齐的模型在相似性任务和出分布情况下表现更佳。
87 3
|
17天前
|
缓存 负载均衡 安全
Swift中的网络代理设置与数据传输
Swift中的网络代理设置与数据传输
|
2月前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
95 8
|
2月前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
2月前
|
网络协议 网络安全 数据安全/隐私保护
计算机网络概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
计算机网络概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
65 4
|
2月前
|
网络协议 网络安全 数据安全/隐私保护
计算机网络概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
【10月更文挑战第27天】计算机主机网关的作用类似于小区传达室的李大爷,负责将内部网络的请求转发到外部网络。当小区内的小不点想与外面的小明通话时,必须通过李大爷(网关)进行联系。网关不仅帮助内部设备与外部通信,还负责路由选择,确保数据包高效传输。此外,网关还参与路由表的维护和更新,确保网络路径的准确性。
76 2
|
2月前
|
供应链 监控 安全
网络安全中的零信任架构:从概念到部署
网络安全中的零信任架构:从概念到部署
|
3月前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
53 2
|
3月前
|
Ubuntu Linux Windows
wsl重装Ubuntu遇到的一些问题( WslRegisterDistribution failed with error: 0x80041002 Error: 0x80041002 (null)、重置网络后WLAN图标消失)
wsl重装Ubuntu遇到的一些问题( WslRegisterDistribution failed with error: 0x80041002 Error: 0x80041002 (null)、重置网络后WLAN图标消失)
|
3月前
|
供应链 网络协议 数据安全/隐私保护