java 1.4中推出的java.nio(新输入/输出)软件包允许像在其他低级语言——如C语言——中一样进行输入/输出。许多开发者认为这些新功能只能进行非阻塞操作;但是,这些新功能提供许多其他新鲜有趣的特性,它们包括:
常规输入/输出以一种相当冗长而又极为不对称的方式堆栈InputStream、Reader和BufferedReader类中你需要的方法为根据。NIO设计更清晰、简单、高效。如果你愿意,你甚至可以用NIO完成所有的输入/输出。在本文中,我将探讨这些功能并讨论其应用过程。
通信通道
NIO API引入一种称作通道的新型原始输入/输出提取方法。通道表示到实体(如硬件设备、文件、网络套接字或者可以执行一个或多个独特的诸如读或写之类输入/输出操作的程序组件)的开放连接。正如在java.nio.channels.Channel接口中所指定的,通道可以处于打开或关闭状态,并且它们既是可异步关闭的,又是可中断的。
操作的一个线程可以被阻止,而另一个线程能够关闭通道,这是通道的一个突出特点。当通道关闭时,被阻止的线程用一个异常激活,表明通道被关闭。
有几个接口对通道接口进行扩张,每个接口指定一个新的输入/输出操作。以下是这些接口的信息:
FileChannel类支持从连接到文件的通道读取字节或向其写入字节,以及查询和修改当前的文件位置及将文件调整为指定大小等常见操作。它定义了在整个文件或具体文件区域上获取锁定的方法;这些方法返回FileLock类的实例。最后,它定义了对要写入到存储设备的文件进行强行更新的方法、在文件和其他通道之间高效传输字节的方法,以及将文件区域直接映射到内存中的方法。