Java NIO API详解.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档