java NIO

作者: 小张同学_loveZY | 来源:发表于2018-08-25 11:01 被阅读0次
基本概念:

java.nio 包: 基于非阻塞的面相缓存区以及通道的java IO 处理工具包,其最大的优势是引入的buffer和channel的概念,并且通过选择器操作多个流,基于非阻塞处理方式,提高传统IO的效率。

NIO 与IO 的主要区别

Buffer

可以理解成一个容器,缓存的作用,有以下几个概念:

  1. capacity:大小
  2. limit: 可访问区大小
  3. position:当前指向的数据
  4. mark && reset: 类似打标签回滚
非直接缓冲区
直接缓冲区

Channel

数据间的通道,可以理解成网线、水管等。Channel 只能与 Buffer 进行交互。

  1. FileChannel: 用于读取、写入、映射和操作文件的通道。
  2. DatagramChannel: 通过UDP 读写网络中的数据通道。
  3. SocketChannel: 通过TCP 读写网络中的数据。
  4. ServerSocketChannel: 监听TCP 连接,对每一个新链接创建SocketChannel,用于服务器端。

Selectors

Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。

可以监听的事件类型(可使用SelectionKey 的四个常量表示):
  • 读: SelectionKey.OP_READ (1)
  • 写: SelectionKey.OP_WRITE (4)
  • 连接: SelectionKey.OP_CONNECT(8)
  • 接收: SelectionKey.OP_ACCEPT (16)

NIO的非阻塞能力正是通过Selectors来实现的。

Scatter / Gather

通过channel可以通过操作多个Buffer,减少过于细粒度的操作对于设备的频繁访问,以提高操作效率。

Pipe

Pipe是2个线程之间的单向数据连接,Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。双向连接时可以定义两个反向的Pipe。

Paths

java.nio.file.Path 接口代表一个平台无关的平台路径,描述了目录结构中文件的位置

Files

java.nio.file.Files 用于操作文件或目录的工具类。

相关文章

网友评论

      本文标题:java NIO

      本文链接:https://www.haomeiwen.com/subject/fggwiftx.html