Java 杂谈java程序员

第二节 netty前传-NIO简介

2018-10-15  本文已影响24人  勃列日涅夫

Java NIO是Java的替代IO API(从jdk1.4开始),意味着替代标准Java IO和Java 网络API。 Java NIO提供了与标准IO API不同的使用IO的方式。
java nio有三大核心部分分别是Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。下面对先对这三个核心部分简单介绍

在标准java的IO API中,使用字节流和字符流。而在NIO中,使用是通道(Channels )和缓冲区(Buffers)。 数据总是从通道读入缓冲区,或从缓冲区写入通道

Java NIO能够执行非阻塞IO。 例如,线程可以要求通道将数据读入缓冲区。 当通道将数据读入缓冲区的过程中,线程可以执行其他操作。 一旦数据已被读入缓冲区,线程就可以继续处理它。 将数据写入通道也是如此。

Java NIO包含 “选择器(Selectors)” 的概念。 Selectors是一个可以监视多个事件通道的对象(例如:连接打开,数据到达、数据读写等)。 因此,单个线程可以监视多个通道的数据。就是nio的多路复用


Buffer

NIO中的关键Buffer实现有:

Channel

Channel和IO中的Stream(流)是差不多一个等级的。不过Stream是单向的,如:InputStream, OutputStream.而Channel是双向的,既可以用来进行读操作,又可以用来进行写操作。
NIO中的Channel的主要实现有:

Selector

Selector就是上面介绍的选择器。在运行单线程可以处理多个Channel,如果一个应用打开了多个通道,但每个连接的流量都很低(本质上表示每个连接处理很短暂,很快就断开了),使用Selector就会很方便。例如一个消息中间件,在监听某个
topic可类比。通过使用Selector, 在向Selector注册相应的Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪(有消息推送过来)。一旦这个方法返回,线程就可以处理这些事件。

具体例子使用见下一节

上一篇下一篇

猜你喜欢

热点阅读