NIO——通道Channel

一、IO的进化史
 ①起初系统的IO由CPU负责,在IO频繁的时候CPU资源不能被充分利用
NIO——通道Channel_第1张图片
 ②后来,有了DMA(直接存储器),当有IO操作时DMA先向CPU申请权限,DMA申请到权限后全权负责IO操作,这样CPU就可以去完成其他的操作,这就是传统的IO模式,但这种方式下当应用程序有大量的频繁的IO操作时,会导致DMA冲突
NIO——通道Channel_第2张图片
 ③使用通道专门负责IO,通道是一个完全独立的处理器,不需要向CPU申请权限,这样就可以大大提高CPU的利用率
NIO——通道Channel_第3张图片
二、通道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() 获
取字节通道

你可能感兴趣的:(NIO)