NIO知识一 Java NIO(New I/O)的三个属性position、limit、capacity
来源:互联网 发布:淘宝怎么交保证金 编辑:程序博客网 时间:2024/05/27 09:46
position: 下一次读取或写入的位置。
limit:指定还有多少数据需要取出(在从缓冲区写入通道时),或者还有多少空间可以放入数据(在从通道读入缓冲区时)。
capacity:指定了可以存储在缓冲区中的最大数据容量,实际上,它指定了底层数组的大小,或者至少是指定了准许我们使用的底层数组的容量。
以上三个属性值之间有一些相对大小的关系:0 <= position <= limit <= capacity。如果我们创建一个新的容量大小为10的ByteBuffer对象,在初始化的时候,position设置为0,limit和 capacity被设置为10,在以后使用ByteBuffer对象过程中,capacity的值不会再发生变化,而其它两个个将会随着使用而变化。三个属性值分别如图所示:
现在我们可以从通道中读取一些数据到缓冲区中,注意从通道读取数据,相当于往缓冲区中写入数据。如果读取4个字节的数据,则此时position的值为4,即下一个将要被写入的字节索引为4,而limit仍然是10,如下图所示:
下一步把读取的数据写入到输出通道中,相当于从缓冲区中读取数据,在此之前,必须调用flip()方法,该方法将会完成两件事情:
1. 把limit设置为当前的position值
2. 把position设置为0
由于position被设置为0,所以可以保证在下一步输出时读取到的是缓冲区中的第一个字节,而limit被设置为当前的position,可以保证读取的数据正好是之前写入到缓冲区中的数据(也就是定义好本次读取最后一个字节的位置:读取为从position到limit),如下图所示:
现在调用get()方法从缓冲区中读取数据写入到输出通道,这会导致position的增加而limit保持不变,但position不会超过limit的值,所以在读取我们之前写入到缓冲区中的4个自己之后,position和limit的值都为4,如下图所示:
在从缓冲区中读取数据完毕后,limit的值仍然保持在我们调用flip()方法时的值,调用clear()方法能够把所有的状态变化设置为初始化时的值,如下图所示:
- NIO知识一 Java NIO(New I/O)的三个属性position、limit、capacity
- Java NIO(New I/O)的三个属性position、limit、capacity
- nio 的buffer 的position capacity limit
- Java NIO(New I/O)相关知识
- Java: NIO(new I/O)
- NIO(java new I/O)
- java jdk1.4后的NIO(New I/O)
- Java NIO通俗编程之缓冲区内部细节状态变量position,limit,capacity(二)
- Java I/O(一) NIO概述
- 《Java NIO》学习笔记一 NIO与标准I/O比较
- Java的新I/O(java.nio包)
- Netty 权威指南笔记(一):网络 I/O 模型和 Java NIO 入门
- Unix的5种I/O模型和Java NIO
- java NIO 和阻塞I/O的区别
- java NIO 和阻塞I/O的区别
- Java NIO:浅析I/O模型(转)
- Java学习笔记(57)------------NIO:浅析I/O模型
- 关于Java I/O和NIO
- 遇到的Hibernate的三个小坑
- hdu 1789 Doing Homework again (贪心)
- Linux网络常用命令
- NGINX负载均衡分发请求的几种方式
- shrio 权限管理filterChainDefinitions过滤器配置
- NIO知识一 Java NIO(New I/O)的三个属性position、limit、capacity
- 用nginx的反向代理机制解决前端跨域问题
- HTTP协议及Java实践
- 斐波那契数列
- Kotlin 中创建类似 Java 的静态工具方法
- SQL—EXISTS的用法(转)
- Python处理DICOM(01)--基础环境搭建
- Hadoop上Data Locality
- anaconda的安装与使用