Java NIO包的简单介绍

Java NIO官方总结

java.nio中几个重要的类

Buffer,数据的容器
Charset,以及相关的解码编码器(用于在字节流和Unicode字符之间转换)
Channel,数据能够执行IO操作的实体(比如硬件设备、文件、网络套接字等) 之间的连接。
Selector和selection key,它们和可选择的Channel一起组成了 多路复用、非阻塞的IO模型

Channel

是一个接口,通道要么是开启的、要么是关闭的,并且他们是异步的可关闭、可中断。
它的子接口有:
ReadableByteChannel:指定了一个read方法,将字节从通道读入缓冲区;
WriteableByteChannel:指定了一个write方法,将字节从缓冲区写入通道;

  • ByteChannel:继承了上述两个接口,所以它有read和write方法。
    • SeekableByteChannel:继承了ByteChannel,用于查询和修改channel的当前位置和它的大小。
  • ScatteringByteChannel:(scatter 分散)继承自ReadableChannel
  • GatheringByteChannel:(gather 聚集)继承自WriteableChannel
    • 两者使用多个而不是单个缓冲区来保存数据的读写方法。
  • NetworkChannel:提供方法绑定通道套接字,设置或得到套接字的配置
    • MulticastChannel:继承自Network接口,用以实现多播。
  • Channels:提供了若干静态方法,用于java.io和java.nio之间互相转换。
  • FileChannel:类,提供了一系列操作,用于从连接到文件的通道里读取或写入。实现了Channel、InterruptibleChannel、ScatteringByteChannel、GatheringByteChannel、SeekableByteChannel等接口。
  • SelectableChannel:抽象类,实现了Channel和InterruptibleChannel。可以和Selector一起实现多路复用。一个通道至多只能在任意特定选择器上注册一次。

Selector

选择器,可以监测一个到多个通道,并能够知道是否为读写事件等做好准备。这样,一个线程就可以管理多个channel,从而管理多个网络连接。

多路复用

IO多路复用指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。
在NIO中可以理解为:多个Channel会注册到Selector上,然后由Selector监测哪些Channel已经是就绪状态,从而使得单线程可以对多个channel进行管理。

你可能感兴趣的:(Java)