一、IO的进化史
①起初系统的IO由CPU负责,在IO频繁的时候CPU资源不能被充分利用
②后来,有了DMA(直接存储器),当有IO操作时DMA先向CPU申请权限,DMA申请到权限后全权负责IO操作,这样CPU就可以去完成其他的操作,这就是传统的IO模式,但这种方式下当应用程序有大量的频繁的IO操作时,会导致DMA冲突
③使用通道专门负责IO,通道是一个完全独立的处理器,不需要向CPU申请权限,这样就可以大大提高CPU的利用率
二、通道Channel
通道Channel,由 java.nio.channels 包定义,表示源节点与目标节点的连接。Channel 类似于传统的“流”,只不过 Channel 本身不直接访问数据,只能与 Buffer 配合进行数据传输。
Channel的主要实现类如下:
FileChannel:负责本地文件的传输
SocketChannel:负责网络文件的传输
ServerSocketChannel:负责网络文件的传输
DatagramChannel:负责网络文件的传输
获取通道的方式:
1、Java针对支持通道的类提供了getChannel()方法,支持通道的类有:
FileInputStream
FileOutputStream
RandomAccessFile
Socket
ServerSocket
DatagramSocket
2、通过通道的静态方法 open() 打开并返回指定通道
3、使用 Files 类的静态方法 newByteChannel() 获取字节通道