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

JAVA NIO 全书 译稿

阅读更多

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程序员,创建极其复杂的对象,完成惊世骇俗的任务,而对支撑Java平台的基本I/O概念却几乎一无所知。本章,我们暂且把封装问题抛在一边,先来看看某些底层I/O实施细节,希望有助于你更好地组织协调各个零部件的I/O操作。

   

第二章 缓冲区 

 

  一个Buffer对象是固定数量的数据的容器。其作用是一个存储器,或者分段运输区,在这里数据可被存储并在之后用于检索。缓冲区如我们在第一章所讨论的那样被写满和释放。对于每个非布尔原始数据类型都有一个缓冲区类。尽管缓冲区作用于它们存储的原始数据类型,但缓冲区十分倾向于处理字节。非字节缓冲区可以在后台执行从字节或到字节的转换,这取决于缓冲区是如何创建的。我们将在本章节后面的部分检查缓冲区数据存储的含义。

  缓冲区的工作与通道紧密联系。通道是I/O传输发生时通过的入口,而缓冲区是这些数据传输的来源或目标。对于离开缓冲区的传输,您想传递出去的数据被置于一个缓冲区,被传送到通道。对于传回缓冲区的传输,一个通道将数据放置在您所提供的缓冲区中。这种在协同对象(通常是您所写的对象以及一到多个Channel对象)之间进行的缓冲区数据传递是高效数据处理的关键。通道将在第三章被详细涉及。  

 

第三章 通道 

 

  Channel用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据。

  多数情况下,通道与操作系统的文件描述符(File Descriptor)和文件句柄(File Handle)有着一对一的关系。虽然通道比文件描述符更广义,但您将经常使用到的多数通道都是连接到开放的文件描述符的。Channel类提供维持平台独立性所需的抽象过程,不过仍然会模拟现代操作系统本身的I/O性能。

  通道是一种途径,借助该途径,可以用最小的总开销来访问操作系统本身的I/O服务。缓冲区则是通道内部用来发送和接收数据的端点。 

 

第四章 选择器 

 

   选择器(Selector)提供选择执行已经就绪的任务的能力,这使得多元I/O成为可能。就像在第一章中描述的那样,就绪选择和多元执行使得单线程能够有效率地同时管理多个I/O通道(channels)。

  有时我们需要采用快速检查大量资源中的任意一个是否需要关注,而在某些东西没有准备好时又不必被迫等待的通用模式。这种检查并继续的能力是可扩展性的关键,它使得仅仅使用单一的线程就可以通过就绪选择来监控大量的通道。
  选择器及相关的类就提供了这种 API,使得我们可以在通道上进行就绪选择。
 

 

第五章 正则表达式  

 

  本章我们将讨论新的程序包java.util.regex(见图5-1)中类的API(译注10)。JSR51,即Java规范请求(Java Specification Request),定义了新的I/O权能,它还明确了添加到Java平台上的正则表达式处理技术。尽管严格说来正则表达式并不是I/O,但是它们最常用于浏览从文件或数据流(stream)中读取的文本数据。

  Perl、egrep和其它文本处理工具有着功能强大的模式匹配(pattern matching),本章中你将学会如何使用新的Java API达到相同的模式匹配效果。  

 

第六章 字符集 

 

  在Java平台上,我们经常需要处理多种语言以及组成这些语言的多个字符。幸运的是,Java是第一个被广泛使用的编程语言,它使用内在的Unicode来表示字符。与以字节为导向的编程语言例如C或C++相比,Unicode的固有支持大大的简化了字符数据处理,但决不是自动地处理字符。您仍需要理解字符映射的工作原理以及如何处理多个字符集。 

 

 

  欢迎批评指正、探讨交流。

80
7
分享到:
评论
55 楼 妍然一笑2010 2011-07-16  
楼主真是全才啊!佩服!
54 楼 lengyun3566 2011-07-12  
多谢lz的分享
53 楼 a545807638 2011-06-21  
好书,呵呵
52 楼 azheng270 2011-05-20  
楼主的所作所为,将对中国的IT产生深远的影响
51 楼 s929498110 2011-04-30  
哇、  棒极了
谢谢博主。 最近正好有学习新IO的打算
50 楼 snake1987 2011-04-02  
很早就知道有这东西了,简单学了下,也用这个简单写了个聊天的小玩意儿,一直没有看过书,不知道这书怎么样,谢谢分享了
49 楼 xuhang1128 2011-03-28  
最近一直在看,要是没有这个中文版的,nio一直都没有打算认真的去学,真心的谢谢 楼主
48 楼 moonzhao 2011-02-24  
刚好本周在看NIO,下来看看。回头给评论
47 楼 favey 2011-02-22  
看了下内容,翻译的也不错,博主太给力了!
46 楼 boyssheng 2011-02-20  
非常感谢楼主~~~
45 楼 裴小星 2011-02-18  
附件已更新。感谢 blacklong 的意见。
44 楼 裴小星 2011-02-18  
谢谢。我会尽快更新。
43 楼 longhong 2011-02-18  
非常感谢LZ的分享
42 楼 blacklong 2011-02-18  
该方法的主要作用是为提前加载文件埋单
该方法的主要作用是为提前加载文件买单。

Socket通道委派协议操作给对等socket对象。如果在通道类中存在似乎重复的socket方法,那
么将有某个新的或者不同的行为同通道类上的这个方法相关联。
Socket channels delegate protocol operations to the peer socket object. In cases where
socket methods seem to be duplicated in the channel class, there is some new or different
behavior associated with the method on the channel class.

服务器端的使用经常会考虑到非阻塞socket通道
非阻塞socket通常被认为是服务端使用的,
41 楼 blacklong 2011-02-18  
直接缓冲区时 I/O 的最佳选择
直接缓冲区是 I/O 的最佳选择

当直接从 byte 型缓冲区中采集数据时,视图**换冲突**拥有提高效率的潜能。如果这个视图
的字节顺序和本地机器硬件的字节顺序一致,低等级的(相对于高级语言而言)语言的代码可
以直接存取缓冲区中的数据值,而不是通过**比特**数据的包装和解包装过程来完成。

ByteBuffer 类提供了一个不太重要的机制来以多字节数据类型的形式存取 byte 数据
组。
ByteBuffer 类提供了一个轻量级的机制,可以将字节组合作为多字节的数据类型来存取。
组。

实际的返回值取决于缓冲区的当前的比特排序(byte-order)设置
实际的返回值取决于缓冲区的当前的字节顺序(byte-order)设置

java中一般不叫函数,叫方法。

每一个函数都有重载的和无参数的形式。重载的函数对位置属性加上特定的字节数。然后无参数的形式则不改变位置属性。
每一个方法都有相对和绝对的形式。相对的形式会根据影响的字节数前移指针的位置,而绝对的形式则保持指针位置不动。

映射缓冲区是带有存储在文件,通过内存映射来存取数据元素的字节缓冲区
映射缓冲区是与文件存储的数据元素关联的字节缓冲区,它通过内存映射来访问。

但是 MappedByteBuffer 对象可以处理独立于文件存取形式的的许多特定字符
但是 MappedByteBuffer 对象具有许多文件存取独有的特征。

现在您可以开车走了
您离开了。

引申
某些用引申的地方,感觉用“继承”或“扩展”更好。

一个 channel类可能实现定义read( )方法的ReadableByteChannel接口,而另一个channel类也许实现WritableByteChannel接口以提供write( )方法。
一个 channel类可能实现了ReadableByteChannel接口,它定义了read( )方法,而另一个channel类可能实现了WritableByteChannel接口,它提供了write( )方法。

该接口引申出了ReadableByteChannel 和WritableByteChannel两个接口
该接口扩展了ReadableByteChannel 和WritableByteChannel两个接口

它是一种用来聚集它自己以一个新名称继承的多个接口的便捷接口
这句话很绕,我也没想好,原文:it's a
convenience interface that aggregates the multiple interfaces it inherits under a new name

这是简化类定义的语法糖(syntactic sugar),它使得用操作器(operator)实例来测试通道对象变得更加简单。
这是简化类定义的语法糖(syntactic sugar),这样,使用instanceof操作符测试通道对象更简单了。

从SelectableChannel引申而来的类可以和支持有条件的选择(readiness selectio)的选择器(Selectors)一起使用
继承SelectableChannel的类可以和Selector一起使用,后者支持准备选择(readiness selection)。


尝试进行任何需要通道处于开放状态作为前提的操作,如读、写等都会导致ClosedChannelException 异常。
尝试进行读、写或其它任何需要通道处于打开状态的操作都会导致ClosedChannelException 异常。

interrupt status
就翻译成“中断状态”就行。

这两个接口都添加了两种以缓冲区阵列作为参数的新方法
这两个接口都添加了两个以缓冲区数组作为参数的新方法

gather数据
感觉可以翻译为“采集数据”
40 楼 blacklong 2011-02-17  
对了,一些语句感觉你可以意译一下,不必完全照原文字译。大家能看懂,读起来流畅就好,不必拘泥于原文格式。
39 楼 blacklong 2011-02-17  
非常感谢,一直想看NIO,可是都是英文,很头疼……多谢楼主。  牛!!啥时候出版呀?
38 楼 裴小星 2011-02-15  
附件已更新,修改了几处明显的错误。
希望大家多提意见,谢谢。
37 楼 裴小星 2011-02-15  
fantasy86 写道
感谢LZ的分享!
不过文中的“块IO”和“非块IO”应该译为“阻塞IO”和“非阻塞IO”?

是的。谢谢提醒。
36 楼 fantasy86 2011-02-14  
感谢LZ的分享!
不过文中的“块IO”和“非块IO”应该译为“阻塞IO”和“非阻塞IO”?

相关推荐

    java NIO和java并发编程的书籍

    java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...

    java NIO.zip

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发...

    Java NIO英文高清原版

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据...

    Java NIO 中文 Java NIO 中文 Java NIO 中文文档

    Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...

    java NIO 视频教程

    Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,...

    java nio 包读取超大数据文件

    ### Java NIO 处理超大数据文件的知识点详解 #### 一、Java NIO简介 Java NIO(New IO)是Java平台上的新输入/输出流API,它提供了与传统IO(即Java IO)不同的数据处理方式。NIO在Java 1.4版本引入,并在后续版本...

    java NIO技巧及原理

    Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 Blocking I/O(IO)相比,提供了更加高效的数据传输方式。在Java NIO中,"新"主要体现在非阻塞和多路复用这两个特性上,这使得NIO更适合于...

    java NIO实例

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种新的I/O模型,它为Java应用程序提供了更高效的数据传输方式。传统的Java I/O模型(BIO)在处理大量并发连接时效率较...

    一个java NIO的例子

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O模型的新技术。在传统的Java IO模型中,读写操作是阻塞的,即当调用read或write方法时,线程会等待数据准备好或...

    Java Nio selector例程

    java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...

    Java NIO Socket基本

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O(同步阻塞I/O)相对。NIO在Java 1.4版本引入,其设计目标是提供一种更高效、更灵活的I/O操作方式,特别适合处理大量并发连接...

    java nio入门学习,两个pdf

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O模型的新技术。在Java 1.4版本中引入,NIO提供了一种全新的I/O编程方式,使得Java开发者能够更高效地处理I/O操作...

    基于Java NIO实现五子棋游戏.zip

    基于Java NIO实现五子棋游戏.zip基于Java NIO实现五子棋游戏.zip 基于Java NIO实现五子棋游戏.zip基于Java NIO实现五子棋游戏.zip 基于Java NIO实现五子棋游戏.zip基于Java NIO实现五子棋游戏.zip 基于Java NIO实现...

    java nio 实现socket

    ### Java NIO 实现Socket通信详解 #### 一、NIO与传统IO的区别及优势 在探讨如何使用Java NIO实现Socket通信之前,我们需要先理解NIO(Non-blocking I/O,非阻塞I/O)与传统阻塞I/O之间的区别。 **传统阻塞I/O...

Global site tag (gtag.js) - Google Analytics