javanio_api帮助文档详解.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在 JDK 1.4 以前,Java 的 IO 操作集中在 java.io 这个 包中,是基于流的同步(blocking)API。对于大多数应用 来说,这样的 API 使用很方便,然而,一些对性能要求较高 的应用,尤其是服务端应用,往往需要一个更为有效的方式 来处理 IO。从 JDK 1.4 起,NIO API 作为一个基于缓冲区, 并 能 提供 异步( non-blockin g)I O 操作的 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 个包一一介绍。 Package java.nio 这个包主要定义了 Buffer 及其子类。Buffer 定义了一个线性存放 primitive type 数据的容器接口 。 对于除 boolean 以外的其他 primitive type,都有一个相应的 Buffer 子类,ByteBuffer 是其中最 重要的一个子类。 下面这张 UML 类图描述了 java. ni o 中的类的关系: Buffer 定义了一个可以线性存放 primitive type 数据的容器接口。 Buffer 主要包含了与类型( byte, char…)无关的功能。值得注意的是 Buffer 及其子类都不是线程安全的。 每个 Buffer 都有以下的属性: capacity 这个 Buffer 最多能放多少数据。 capacity 一般在 buf fer 被创建的时候指定。 limit 在 Buffer 上进行的读写操作都不能越过这个下标。当写数据到 buf fer 中时,limit 一般和 capacity 相等,当读数据时, limit 代表 buf fer 中有效数据的长度。 position 读/写操作的当前下 标。当使用 buf fer 的相对位置进行读 /写操作时,读/写会从这个下标进 行, 并在操作完成后, buf fer 会更新下标的值。 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 展开的。 By

文档评论(0)

152****7770 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档