logo资料库

Java NIO pdf.pdf

第1页 / 共253页
第2页 / 共253页
第3页 / 共253页
第4页 / 共253页
第5页 / 共253页
第6页 / 共253页
第7页 / 共253页
第8页 / 共253页
资料共253页,剩余部分请下载后查看
目录
前言
组织形式
目标读者
软件及版本
本书中使用的约定
字体约定
如何联系我们
鸣谢
第一章 简介
1.1 I/O与CPU时间的比较
1.2 CPU已不再是束缚
1.3 进入正题
1.4 I/O概念
1.4.1 缓冲区操作
1.4.1.1 发散/汇聚
1.4.2 虚拟内存
1.4.3 内存页面调度
1.4.4 文件I/O
1.4.4.1 内存映射文件
1.4.4.2 文件锁定
1.4.5 流I/O
1.5 总结
第二章 缓冲区
2.1 缓冲区基础
2.1.1 属性
2.1.2 缓冲区API
2.1.3 存取
2.1.4 填充
2.1.5 翻转
2.1.6 释放
2.1.7 压缩
2.1.8 标记
2.1.9 比较
2.1.10 批量移动
2.2 创建缓冲区
2.3 复制缓冲区
2.4 字节缓冲区
2.4.1字节顺序
2.4.2 直接缓冲区
2.4.3 视图缓冲区
2.4.4 数据元素视图
2.4.5 存取无符号数据
2.4.6 内存映射缓冲区
2.5 总结
第三章 通道
3.1 通道基础
3.1.1 打开通道
3.1.2 使用通道
3.1.3 关闭通道
3.2 Scatter/Gather
3.3 文件通道
3.3.1 访问文件
3.3.2 文件锁定
3.4 内存映射文件
3.4.1 Channel-to-Channel 传输
3.5 Socket 通道
3.5.1 非阻塞模式
3.5.2 ServerSocketChannel
3.5.3 SocketChannel
3.5.4 DatagramChannel
3.6 管道
3.7 通道工具类
3.8 总结
第四章 选择器
4.1 选择器基础
4.1.1 选择器,可选择通道和选择键类
4.1.2 建立选择器
4.2 使用选择键
4.3 使用选择器
4.3.1 选择过程
4.3.2 停止选择过程
4.3.3 管理选择键
4.3.4 并发性
4.4 异步关闭能力
4.5 选择过程的可扩展性
第五章 正则表达式
5.1 正则表达式基础
5.2 Java正则表达式
5.2.1 CharSequence接口
5.2.2 Pattern类
5.2.2.1 利用模式类拆分字符串
5.2.3 Matcher类
5.3 String类的正则表达式方法
5.4 Java正则表达式句法
5.5面向对象的文件Grep
5.6总结 Summary
第六章 字符集
6.1 字符集基础
6.2 字符集
6.2.1 字符集类
6.2.2 字符集比较
6.2.3 字符集编码器
6.2.3.1 CoderResult类
6.2.4 字符集解码器
6.3 字符集服务器供应者接口
6.3.1 创建自定义字符集
6.3.2 供给您的自定义字符集
6.4 总结
附录A. NIO与JNI
附录B. 可选择通道SPI
附录C. NIO快速参考
C.1 java.nio包
C.2 java.nio.channels包
C.3 java.nio.channels.spi 包
C.4 java.nio.charset 包
C.5 java.nio.charset.spi 包
C.6 java.util.regex 包
Ron Hitchens 著 裴小星 译 1
JavaTM NIO Ron Hitchens 著 裴小星 译 出版商:O’Reilly 第一版 2002 年 8 月 ISBN: 0-596-00288-2 Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O 特性所提供的各种潜能。您将通过实例学会如何使用这些工具来解决现 实工作中常常遇到的 I/O 问题,并了解这些新特性如何对响应速率、可伸缩性和可靠性产生直接影 响。 NIO API 是对 1.3 版 I/O 特性的补充而非取代,因此,何时使用新的 API,何时老的 1.3 版 I/O API 更适合特定应用,也是您将学习的内容。 2
目录 题献 ............................................................................................................................................ 1 前言 ............................................................................................................................................ 2 组织形式 .............................................................................................................................................3 目标读者 .............................................................................................................................................5 软件及版本 .........................................................................................................................................5 本书中使用的约定 .............................................................................................................................6 如何联系我们 .....................................................................................................................................7 鸣谢 .....................................................................................................................................................8 第一章 简介 .......................................................................................................................... 10 1.1 I/O 与 CPU 时间的比较 .............................................................................................................10 1.2 CPU 已不再是束缚 ....................................................................................................................11 1.3 进入正题 ....................................................................................................................................12 1.4 I/O 概念 ......................................................................................................................................13 1.5 总结 ............................................................................................................................................20 第二章 缓冲区 ...................................................................................................................... 22 2.1 缓冲区基础 ................................................................................................................................23 2.2 创建缓冲区 ................................................................................................................................36 2.3 复制缓冲区 ................................................................................................................................38 2.4 字节缓冲区 ................................................................................................................................40 2.5 总结 ............................................................................................................................................51 第三章 通道 .......................................................................................................................... 53 3.1 通道基础 ....................................................................................................................................55 3.2 Scatter / Gather ............................................................................................................................62 3.3 文件通道 ....................................................................................................................................68 3.4 内存映射文件 ............................................................................................................................83 3.5 套接字通道 ................................................................................................................................96 3.6 管道 ..........................................................................................................................................117 3.7 通道实用工具类 ......................................................................................................................122 3.8 总结 ..........................................................................................................................................123 第四章 选择器 .................................................................................................................... 125 4.1 选择器基础 ..............................................................................................................................126 4.2 使用选择键 ..............................................................................................................................132 4.3 使用选择器 ..............................................................................................................................135 4.4 异步可关闭性 ..........................................................................................................................144 4.5 选择缩放 ..................................................................................................................................144 4.6 总结 ..........................................................................................................................................148 3
第五章 正则表达式 ............................................................................................................ 150 5.1 正则表达式基础 ......................................................................................................................151 5.2 Java 正则表达式 API ...............................................................................................................153 5.3 字符串类正则表达式方法 ......................................................................................................153 5.4 Java 正则表达式语法 ...............................................................................................................174 5.5 面向对象的文件检索 ..............................................................................................................180 5.6 总结 ..........................................................................................................................................186 第六章 字符集 .................................................................................................................... 187 6.1 字符集基础 ..............................................................................................................................187 6.2 字符集 ......................................................................................................................................188 6.3 字符集服务提供接口 ..............................................................................................................207 6.4 总结 ..........................................................................................................................................217 附录 A. NIO 与 JNI .............................................................................................................. 218 附录 B. 可选择通道 SPI ...................................................................................................... 220 附录 C. NIO 快速参考 ......................................................................................................... 223 C.1 java.nio 包 ................................................................................................................................223 C.2 java.nio.channels 包 .................................................................................................................230 C.3 java.nio.channels.spi 包 ............................................................................................................242 C.4 java.nio.charset 包 ....................................................................................................................244 C.5 java.nio.charset.spi 包 ..............................................................................................................248 C.6 java.util.regex 包 ......................................................................................................................248 4
题献 给我的妻子,Karen。 离了你我可怎么办? 1
前言 计算机毫无用处,除了答案什么也没有。 ——毕加索 本书介绍了 Java 平台上的高级输入/输出,具体点说,就是使用 Java 2 标准版(J2SE)软件 开发包(SDK)1.4 及以后版本进行的输入/输出。J2SE 1.4 版代号 Merlin,包含可观的 I/O 新特 性,对此我们将作详细论述。这些新的 I/O 特性主要包含在 java.nio 软件包及其子包中,并被命 名为 New I/O(NIO)。通过本书,您将学会如何使用这些令人兴奋的新特性来极大地提升 Java 应 用程序的 I/O 效率。 Java 真正的归宿还在企业应用(何谓“企业应用”,恐怕还没有一个确切的定义),但与本地编 译语言相比,Java 在 I/O 领域一直处于劣势,这种情况直到 J2SE SDK 发布了 1.4 版以后才有了改 观。Java 的劣势源于其最大的优势:一次编写,到处运行。Java 需要运行于虚拟机(即 JVM)之 上,为了保证 Java 字节码在各种 JVM 部署平台上运行效果一致,作些妥协是必须的。既然需要通 用于不同的操作系统平台,那么,某种程度上就必须选择各种平台都接受的处理方案。 最切实地感受到妥协带来的后果的,莫过于 I/O 领域。虽然 Java 有一套完备的 I/O 类,但迄今 为止还只是针对通用特性,通常位于高端抽象层,横跨各种操作系统。这些 I/O 类主要面向流数 据,经常为了处理个别字节或字符,就要执行好几个对象层的方法调用。 这种面向对象的处理方法,将不同的 I/O 对象组合到一起,提供了高度的灵活性,但需要处理 大量数据时,却可能对执行效率造成致命伤害。I/O 的终极目标是效率,而高效的 I/O 往往又无法 与对象形成一一对应的关系。高效的 I/O 往往意味着您要选择从 A 到 B 的最短路径,而执行大量 I/O 操作时,复杂性毁了执行效率。 传统 Java 平台上的 I/O 抽象工作良好,适应用途广泛。但是当移动大量数据时,这些 I/O 类可 伸缩性不强,也没有提供当今大多数操作系统普遍具备的常用 I/O 功能,如文件锁定、非块 I/O、 就绪性选择和内存映射。这些特性对实现可伸缩性是至关重要的,对保持与非 Java 应用程序的正 常交互也可以说是必不可少的,尤其是在企业应用层面,而传统的 Java I/O 机制却没有模拟这些通 用 I/O 服务。 具体的企业在具体的系统上配置具体的应用,这里无关乎抽象。在现实世界,效率是大事—— 头等大事。企业购置的用于部署大型应用的计算机系统,其 I/O 性能异常卓越(系统供应商往往投 入巨资进行研发),而 Java 迄今为止一直无法充分利用这一点。当企业的需求是以最快的速度传 送大量数据时,样貌朴实但迅捷的解决方案往往胜过漂亮却动作迟缓的。总之一句话,时间就是金 钱。 2
JDK 1.4 是由 Java 社区进程(Java Community Process)主导发行的首个主要发行版。Java 产品 的用户和供应商可就 Java 平台需要引入什么新特性提出要求和建议,JCP(http://jcp.org/)为此提 供了手段。本书的主题——Java New I/O(NIO)——就是这样一项提议的产物。Java 规范请求#51 (JSR 51, http://jcp.org/jsr/detail/51.jsp)包含了对高速、可伸缩 I/O 特性的详尽描述,借助这一特 性,底层操作系统的 I/O 性能可以得到更好发挥。JSR 51 的实现,其结果就是新增类组合到一起, 构成了 java.nio 及其子包,以及 java.util.regex 软件包,同时现存软件包也相应作了几处 修改。JCP 网站详细介绍了 JSR 的运作流程,以及 NIO 从最初的提议到最终实现并发布的演进历 程。 随着 Merlin 的发布,操作系统强大的 I/O 特性终于可以借助 Java 提供的工具得到充分发挥。 论及 I/O 性能,Java 再也不逊于任何一款编程语言。 组织形式 本书分六章,每章针对 NIO 的一个大的方面。第一章讨论一般 I/O 概念,为以后各章相关论述 作了铺垫。第二至第四章论及 NIO 的核心内容:缓冲区、通道和选择器。接下来介绍新引入的正 则表达式 API。正则表达式的处理与 I/O 紧密贴合,亦被纳入 JSR 51 特征集之内。最后,我们看一 下新的可插拔字符集映射系统,这也是 NIO 和 JSR 51 的组成部分。 以下概要,是专门为那些迫不及待往前赶的人准备的。 缓冲区(Buffers) 新的 Buffer 类是常规 Java 类和通道之间的纽带。原始数据元素组成的固定长度数组,封装在 包含状态信息的对象中,存入缓冲区。缓冲区提供了一个会合点:通道既可提取放在缓冲区中的数 据(写),也可向缓冲区存入数据供读取(读)。此外,还有一种特殊类型的缓冲区,用于内存映 射文件。 第二章将详细讨论缓冲区对象。 通道(Channels) NIO 新引入的最重要的抽象是通道的概念。Channel 对象模拟了通信连接,管道既可以是单向 的(进或出),也可以是双向的(进和出)。可以把通道想象成连接缓冲区和 I/O 服务的捷径。 某些情况下,软件包中的旧类可利用通道。为了能够向与文件或套接字关联的通道进行存取, 适当的地方都增加了新方法。 多数通道可工作在非块模式下,这意味着更好的可伸缩性,尤其是与选择器一同使用的时候。 通道会在第三章作详细介绍。 3
文件锁定和内存映射文件(File locking and memory-mapped files) 新的 FileChannel 对象包含在 java.nio.channels 软件包内,提供许多面向文件的新特 性,其中最有趣的两个是文件锁定和内存映射文件。 在多个进程协同工作的情况下,要协调各个进程对共享数据的访问,文件锁定是必不可少的工 具。 将文件映射到内存,这样在您看来,磁盘上的文件数据就像是在内存中一样。这利用了操作系 统的虚拟内存功能,无需在内存中实际保留一份文件的拷贝,就可实现文件内容的动态高速缓存。 文件锁定和内存映射文件也在第三章讨论。 套接字(Sockets) 套接字通道类为使用网络套接字实现交互提供了新方法。套接字通道可工作于非块模式,并可 与选择器一同使用。因此,多个套接字可实现多路传输,管理效率也比 java.net 提供的传统套 接字更高。 三个新套接字通道,即 ServerSocketChannel、SocketChannel 和 DatagramChannel,将在第三章 讲到。 选择器(Selectors) 选择器可实现就绪性选择。Selector 类提供了确定一或多个通道当前状态的机制。使用选择 器,借助单一线程,就可对数量庞大的活动 I/O 通道实施监控和维护。 选择器会在第四章作详细介绍。 正则表达式(Regular expressions) 新增的 java.util.regex 软件包将类似 Perl 语言的正则表达式处理机制引入 Java。这一人 们期盼已久的特性有着广泛用途。 新的正则表达式 API 之所以被看成是 NIO 的组成部分,是因 JSR 51 把它与其他 NIO 特性放在 一起作了详细说明。虽然它在许多方面与 NIO 的其他组成部分缺乏平行关系,但它在文件处理等 众多领域都是极其有用的。 第五章讨论 JDK 1.4 正则表达式 API。 字符集(Character sets) java.nio.charsets 提供了新类用于处理字符与字节流之间的映射关系。您可以对字符转 4
分享到:
收藏