您了解java.nio新功能的优点吗

2007-04-27     推荐:10979430    收藏:7104331    评论:0     来源:开发者在线

java 1.4中推出的java.nio(新输入/输出)软件包允许像在其他低级语言——如C语言——中一样进行输入/输出。许多开发者认为这些新功能只能进行非阻塞操作;但是,这些新功能提供许多其他新鲜有趣的特性,它们包括:

  • 你可以记忆地图文件。
  • 你能够直接从硬盘上,而不必一字节一字节地读写数据块。(当你在非阅读期间将数据从缓冲器中提出时,它处理低字节优先问题。)
  • 你可以进行非阻塞异步输入/输出。
  • 你能够锁定整个或部分文件。

常规输入/输出以一种相当冗长而又极为不对称的方式堆栈InputStream、ReaderBufferedReader类中你需要的方法为根据。NIO设计更清晰、简单、高效。如果你愿意,你甚至可以用NIO完成所有的输入/输出。在本文中,我将探讨这些功能并讨论其应用过程。

通信通道

NIO API引入一种称作通道的新型原始输入/输出提取方法。通道表示到实体(如硬件设备、文件、网络套接字或者可以执行一个或多个独特的诸如读或写之类输入/输出操作的程序组件)的开放连接。正如在java.nio.channels.Channel接口中所指定的,通道可以处于打开或关闭状态,并且它们既是可异步关闭的,又是可中断的。

操作的一个线程可以被阻止,而另一个线程能够关闭通道,这是通道的一个突出特点。当通道关闭时,被阻止的线程用一个异常激活,表明通道被关闭。

有几个接口对通道接口进行扩张,每个接口指定一个新的输入/输出操作。以下是这些接口的信息:

  • ReadableByteChannel接口指定一个将字节从通道读入缓冲器的read()方法。
  • WritableByteChannel接口指定一个将字节从通道写入缓冲器的write()方法。
  • ScatteringByteChannelGatheringByteChannel接口分别扩张ReadableByteChannelWritableByteChannel接口,采用缓冲器序列而非一个单独缓冲器增加read()write()方法。

FileChannel类支持从连接到文件的通道读取字节或向其写入字节,以及查询和修改当前的文件位置及将文件调整为指定大小等常见操作。它定义了在整个文件或具体文件区域上获取锁定的方法;这些方法返回FileLock类的实例。最后,它定义了对要写入到存储设备的文件进行强行更新的方法、在文件和其他通道之间高效传输字节的方法,以及将文件区域直接映射到内存中的方法。

【下一页】
您可以针对本文进行:[评论]  [收藏]  [推荐]   [查看原文链接]  
  • 共有0条评论  点击查看更多评论
  • 网友评论仅供网友表达个人看法,并不表明e800同意其观点或证实其描述
我想发表评论:
用户名密码
  • 匿名发表
    验证码: