`
裴小星
  • 浏览: 261118 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
8ccf5db2-0d60-335f-a337-3c30d2feabdb
Java NIO翻译
浏览量:27582
F3e939f0-dc16-3d6e-8c0b-3315c810fb91
PureJS开发过程详解
浏览量:71964
07a6d496-dc19-3c71-92cf-92edb5203cef
MongoDB Java ...
浏览量:62012
社区版块
存档分类
最新评论

Java NIO 前言

阅读更多

前言

计算机毫无用处,除了答案什么也没有。

——毕加索

  本书介绍了Java平台上的高级输入/输出,具体点说,就是使用Java 2标准版(J2SE)软件开发包(SDK1.4及以后版本进行的输入/输出。J2SE 1.4版代号Merlin,包含可观的I/O新特性,对此我们将作详细论述。这些新的I/O特性主要包含在java.nio软件包及其子包中,并被命名为New I/ONIO)。通过本书,您将学会如何使用这些令人兴奋的新特性来极大地提升Java应用程序的I/O效率。

  Java真正的归宿还在企业应用(何谓企业应用,恐怕还没有一个确切的定义),但与本地编译语言相比,JavaI/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往往意味着您要选择从AB的最短路径,而执行大量I/O操作时,复杂性毁了执行效率。

  传统Java平台上的I/O抽象工作良好,适应用途广泛。但是当移动大量数据时,这些I/O类可伸缩性不强,也没有提供当今大多数操作系统普遍具备的常用I/O功能,如文件锁定、非块I/O、就绪性选择和内存映射。这些特性对实现可伸缩性是至关重要的,对保持与非Java应用程序的正常交互也可以说是必不可少的,尤其是在企业应用层面,而传统的Java I/O机制却没有模拟这些通用I/O服务。

  具体的企业在具体的系统上配置具体的应用,这里无关乎抽象。在现实世界,效率是大事——头等大事。企业购置的用于部署大型应用的计算机系统,其I/O性能异常卓越(系统供应商往往投入巨资进行研发),而Java迄今为止一直无法充分利用这一点。当企业的需求是以最快的速度传送大量数据时,样貌朴实但迅捷的解决方案往往胜过漂亮却动作迟缓的。总之一句话,时间就是金钱。

  JDK 1.4是由Java社区进程(Java Community Process)主导发行的首个主要发行版。Java产品的用户和供应商可就Java平台需要引入什么新特性提出要求和建议,JCPhttp://jcp.org/)为此提供了手段。本书的主题——Java New I/ONIO——就是这样一项提议的产物。Java规范请求#51JSR 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特征集之内。最后,我们看一下新的可插拔字符集映射系统,这也是NIOJSR 51的组成部分。

以下概要,是专门为那些迫不及待往前赶的人准备的。

缓冲区(Buffers

  新的Buffer类是常规Java类和通道之间的纽带。原始数据元素组成的固定长度数组,封装在包含状态信息的对象中,存入缓冲区。缓冲区提供了一个会合点:通道既可提取放在缓冲区中的数据(写),也可向缓冲区存入数据供读取(读)。此外,还有一种特殊类型的缓冲区,用于内存映射文件。

  第二章将详细讨论缓冲区对象。

通道(Channels

  NIO新引入的最重要的抽象是通道的概念。Channel对象模拟了通信连接,管道既可以是单向的(进或出),也可以是双向的(进和出)。可以把通道想象成连接缓冲区和I/O服务的捷径。

  某些情况下,软件包中的旧类也可以使用通道。为了能够向与文件或套接字关联的通道进行存取,适当的地方都增加了新方法。

  多数通道可工作在非阻塞模式下,这意味着更好的可伸缩性,尤其是与选择器一同使用的时候。

  通道会在第三章作详细介绍。

文件锁定和内存映射文件(File locking and memory-mapped files

  新的FileChannel对象包含在java.nio.channels软件包内,提供许多面向文件的新特性,其中最有趣的两个是文件锁定和内存映射文件。

  在多个进程协同工作的情况下,要协调各个进程对共享数据的访问,文件锁定是必不可少的工具。

  将文件映射到内存,这样在您看来,磁盘上的文件数据就像是在内存中一样。这利用了操作系统的虚拟内存功能,无需在内存中实际保留一份文件的拷贝,就可实现文件内容的动态高速缓存。

  文件锁定和内存映射文件也在第三章讨论。

套接字(Sockets

  套接字通道类为使用网络套接字实现交互提供了新方法。套接字通道可工作于非阻塞模式,并可与选择器一同使用。因此,多个套接字可实现多路传输,管理效率也比java.net提供的传统套接字更高。

  三个新套接字通道,即ServerSocketChannelSocketChannelDatagramChannel,将在第三章讲到。

选择器(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提供了新类用于处理字符与字节流之间的映射关系。您可以对字符转换映射方式进行选择,也可以自己创建映射。

  字符代码转换的相关问题在第六章讨论。

目标读者

  本书为中高级Java程序员所写:他们熟练掌握这门语言,在完成大规模、复杂的数据处理任务时,有充分利用Java NIO所提供新特性的愿望和需求。在写作的过程中,我假定您对JDK标准类软件包、面向对象的设计技巧、继承等等都有充分了解。我还假定您了解I/O在操作系统层面的基本工作原理,知道什么是文件,什么是套接字,什么是虚拟内存,诸如此类。第一章就这些概念作了高屋建瓴的回顾,但没有深度剖析。

  如果您对Java平台上的I/O软件包尚处于摸索阶段,也许您应该先读一读Elliote Rusty Harold所著《Java I/O》(O'Reilly)(http://www.oreilly.com/catalog/javaio/)。那是一本关于java.io软件包的很好的入门教材。虽然可以把本书看作那本书的后续读物,但两者并无承接关系。本书重点关注的是如何利用新的java.nio软件包实现I/O性能的最大化。另外,本书还引入了一些新的I/O概念,这也超出了java.io软件包的范畴。

  我们还探讨了字符集编码和正则表达式,这也是与NIO绑定在一起的新特征集的一部分。为软件国际化或专业应用使用字符集的程序员会对java.nio.charsets软件包感兴趣,第六章会有相关讨论。

  如果您已转向Java,但时不时地需要回到Perl处理正则表达式,告诉您,以后再也不用了。新推出的java.util.regex软件包在标准JDK中包含了Perl 5所有的正则表达式功能,个别极其晦涩难懂的除外,此外还有几项创新。

软件及版本

  本书描述了JavaI/O性能,尤其是java.niojava.util.regex两个软件包。这两个软件包首次出现于J2SE 1.4版,所以,您必须拥有Java SDK 1.4(或以后)的可用版本,才能使用本书提供的素材。您可通过访问Sun公司网站http://java.sun.com/j2se/1.4/获得Java SDK。我还会在正文中使用J2SE SDK指代Java开发包(JDK),在本书范围内,二者含义相同。

  本书基于20022月发布的SDK最终版本1.4.0。早前几个月,1.4 beta版已广为流传。在最终版本即将发布之前,NIO API作了重要修正。因此,您会发现本书所讲某些细节,与您在最终版本发布之前所知论述存在出入。本书根据所有已知的最后修正作了更新,应该不存在与最终版本1.4.0不一致之处。J2SE的后续版本可能引入与本书相冲突的内容,如果存在疑问,请参考与软件一同发布的技术文档。

  本书包含众多实例,向您示范如何使用API。所有代码举例及相关信息都可从http://www.javanio.info/下载,更多实例和测试代码也可从该网站取得。NIO执行小组提供的额外代码示例可从http://java.sun.com/j2se/1.4/docs/guide/nio/example/取得。

分享到:
评论
4 楼 thy779463753 2013-07-01  
楼主 您这个书写的非常好,不知道为什么没有后续的出来了,我非常期待啊。。
3 楼 貌似掉线 2013-01-24  
2 楼 pktangshao 2012-06-13  
  
1 楼 stona126 2011-03-23  

相关推荐

    java nio 中文版

    这些新的I/O特性主要包含在java.nio软件包及其子包中,并被命名为New I/O(NIO)。通过本书,您将学会如何使用这些令人兴奋的新特性来极大地提升Java应用程序的I/O效率。  目录 前言 第一章 简介 第二章 缓冲...

    java8源码-interview:常见的面试题整理

    源码引言 本文针对一些面试经常出现的问题进行总结,会不定期更新 本文仅仅起到一个目录的作用,同时本文的很多内容来源于互联网,在这里做一个声明。 java篇 java基础 java集合 java多线程 JVM SDN篇 网络篇 数据库...

    Java网络编程(第三版)中文版.part09.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    java8源码-javaReview:java知识复习

    java8 源码 前言:越努力,越幸运!加油吧,打工人!...[NIO](java/java基础部分/NIO/Java NIO.md) JavaWeb Java框架 开发工具 NoSQL 消息中间件 Elasticsearch MySQL Nginx 分布式相关 源码相关 云原生

    leetcode下载-code-editor:一个在线Java代码编辑器

    leetcode下载 前言 模仿 leetcode 的一个在线代码编辑器,可以在线运行查看结果。 主要功能实现 通过把字符串代码保存在 ...java.nio.* java.text.* java.time.* java.util.* 运行结果展示 成功结果展示 失败结果展示

    Java中的动态代理模式

    在hadoop中,DataNode和NameNode之间的控制信息的交流是通过RPC机制完成的,采用的是动态代理和java NIO的方式。DataNode端是通过获得NameNode的代理,通过该代理和NameNode进行通信的,为了更好的分析hadoop的RPC...

    NIO与零拷贝1

    前言零拷贝是服务器网络编程的关键,任何性能优化都离不开。那么,他们在 OS 里,到底是怎么样的一个的设计?本文将简单聊聊 mmap 和 sendFile 这两个

    Java网络编程(第三版)中文版.part11.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    Java网络编程(第三版)中文版.part06.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    Java网络编程(第三版)中文版.part07.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    Java网络编程(第三版)中文版.part01.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    Java网络编程(第三版)中文版.part03.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    Java网络编程(第三版)中文版.part02.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    Java网络编程(第三版)中文版.part04.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    Java网络编程(第三版)中文版.part05.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    Java网络编程(第三版)中文版.part13.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    Java网络编程(第三版)中文版.part10.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    Java网络编程(第三版)中文版.part12.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    Java网络编程(第三版)中文版.part08.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

    Java网络编程(第三版)高清中文版.part01.rar

    本书展示了如何使用JSSE编写安全的网络应用程序,解释了如何使用NIO API编写超高性能的服务器。它还涵盖了Java对网络代理、Web cookie和URL缓存的支持。 《Java网络编程》不仅仅是对API的解释:它还展示了如何使用...

Global site tag (gtag.js) - Google Analytics