java NIO

基本概念:

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(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java I...
    JackChen1024阅读 12,233评论 1 143
  • Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java I...
    编码前线阅读 6,700评论 0 5
  • Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java I...
    zhisheng_blog阅读 4,804评论 0 7
  • # Java NIO # Java NIO属于非阻塞IO,这是与传统IO最本质的区别。传统IO包括socket和文...
    Teddy_b阅读 3,777评论 0 0
  • 5.5.2中没有了以前那种参数是对象的SendMessage方法,WTF. obj.SendMessage("Fo...
    笛音夏扇阅读 3,831评论 0 0