绝大多数应用程序在运行过程中都会进行两种类型的计算:一种是占用CPU时间的计算,另一种是与数据输入/输出(I/O)相关的计算。在这两种计算中,一般是与I/O相关的计算所花费的时间占较大的比重。
主要原因:在进行I/O操作时,一般需要竞争操作系统中有限的资源,或是需要等待速度较慢的外部设备完成其操作,从而造成I/O相关的计算所等待的时间较长。
对于I/O操作来说,其根本的作用在于传输数据。输入和输出指的是数据的流向,实际传输是通过某些具体的媒介来完成的。这其中最主要的媒介是文件系统和网络链接。这两种传输方式在Java I/O中受到了良好的支持。
最早的java.io包把I/O操作抽象成数据的流动,进而有了流(stream)的概念。在Java NIO中,则把I/O操作抽象成端到端的一个数据链接,这就有了通道(channel)的概念。