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