- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java NIO API详解
Java NIO API详解
NIO API 主要集中在 java.nio 和它的 subpackages 中:
java.nio
定义了 Buffer 及其数据类型相关的子类。其中被 java.nio.channels 中的类用来进行 IO 操
作的 ByteBuffer 的作用非常重要。
java.nio.channels
定义了一系列处理 IO 的 Channel 接口以及这些接口在文件系统和网络通讯上的实现。通
过 Selector 这个类,还提供了进行非阻塞 IO 操作的办法。这个包可以说是 NIO API 的核
心。
java.nio.channels.spi
定义了可用来实现 channel 和 selector API 的抽象类。
java.nio.charset
定义了处理字符编码和解码的类。
java.nio.charset.spi
定义了可用来实现 charset API 的抽象类。
java.nio.channels.spi 和 java.nio.charset.spi 这两个包主要被用来对现有 NIO API 进行扩展,
在实际的使用中,我们一般只和另外的 3 个包打交道。下面将对这 3 个包一一介绍。
Packagejava.nio
这个包主要定义了 Buffer 及其子类。Buffer 定义了一个线性存放 primitive type 数据的容
器接口。对于除 boolean 以外的其他 primitive type ,都有一个相应的 Buffer 子类,
ByteBuffer 是其中最重要的一个子类。
下面这张 UML 类图描述了 java.nio 中的类的关系:
Buffer
定义了一个可以线性存放 primitive type 数据的容器接口。Buffer 主要包含了与类型(byte,
char… )无关的功能。值得注意的是 Buffer 及其子类都不是线程安全的。
每个 Buffer 都有以下的属性:
capacity
这个 Buffer 最多能放多少数据。 capacity 一般在 buffer 被创建的时候指定。
limit
在 Buffer 上进行的读写操作都不能越过这个下标。当写数据到 buffer 中时,limit 一般和
capacity 相等,当读数据时, limit 代表 buffer 中有效数据的长度。
position
读 / 写操作的当前下标。当使用 buffer 的相对位置进行读 / 写操作时,读 / 写会从这个
下标进行,并在操作完成后, buffer 会更新下标的值。
mark
一个临时存放的位置下标。调用 mark() 会将 mark 设为当前的 position 的值,以后调用
reset() 会将 position 属性设置为 mark 的值。mark 的值总是小于等于 position 的值,如
果将 position 的值设的比 mark 小,当前的 mark 值会被抛弃掉。
这些属性总是满足以下条件:
0 = mark = position = limit = capacity
limit 和 position 的值除了通过 limit() 和 position() 函数来设置,也可以通过下面这些函数
来改变:
Buffer clear()
把 position 设为 0 ,把 limit 设为 capacity ,一般在把数据写入 Buffer 前调用。
Buffer flip()
把 limit 设为当前 position ,把 position 设为 0 ,一般在从 Buffer 读出数据前调用。
Buffer rewind()
把 position 设为 0 , limit 不变,一般在把数据重写入 Buffer 前调用。
Buffer 对象有可能是只读 的,这时,任何对该对象的写操作都会触发一个
ReadOnlyBufferException 。 isReadOnly() 方法可以用来判断一个 Buffer 是否只读。
ByteBuffer
在 Buffer 的子类中, ByteBuffer 是一个地位较为特殊的类,因为在 java.io.channels 中定
义的各种 channel 的 IO 操作基本上都是围绕 ByteBuffer 展开的。
ByteBuffer 定义了 4 个 static 方法来做创建工作:
ByteBuffer allocate(int capacity)
创建一个指定 capacity 的 ByteBuffer 。
ByteBuffer allocateDirect(int c
您可能关注的文档
最近下载
- 四级检验工理论1.docx VIP
- 附件:江苏省建设工程监理现场用(第七版).docx VIP
- 钳工中级班练习(2021-10-27).docx VIP
- DB13_T1418-2011_高温闷棚土壤消毒技术规程_河北省.docx VIP
- 《牛的解剖》课件.ppt VIP
- 新收入准则下建筑业的全流程账务处理.pdf VIP
- DB11 971-2013 重点建设工程施工现场治安防范系统规范.pdf VIP
- 钳工中级班练习(2021-11-1).docx VIP
- 《医疗器械经营质量管理基本要求》DB14T 3291-2025.pdf VIP
- 2024年中考第三次模拟考试题:道德与法治(陕西卷)(解析版).docx VIP
原创力文档


文档评论(0)