第二节 netty前传-NIO简介

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 NIO: Channels and Buffers

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

  • Java NIO: Non-blocking IO

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

  • Java NIO: Selectors

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


Buffer

NIO中的关键Buffer实现有:

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer
    分别对应基本数据类型: byte, char, double, float, int, long, short。当然NIO中还有 HeapByteBuffer, DirectByteBuffer表示堆内存和直接内存(少了从系统到虚拟机之间数据的复制操作,所以更快效率更高,但是由于直接内存不由jvm管理所以也更容易出现内存泄漏。)
    之后会单独对详细介绍

Channel

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

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel
    从上述的名字就可以猜出:分别对应的是文件IO、UDP和TCP(Server和Client)。

Selector

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

具体例子使用见下一节

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java I...
    JackChen1024阅读 12,279评论 1 143
  • 转自 http://www.ibm.com/developerworks/cn/education/java/j-...
    抓兔子的猫阅读 6,988评论 0 22
  • NIO概述 Java NIO全称为Non-blocking IO或者New IO,从名字我们知道NIO是非阻塞的I...
    zhong0316阅读 3,887评论 0 7
  • 一、基本概念描述 1.1 I/O简介 I/O即输入输出,是计算机与外界世界的一个借口。IO操作的实际主题是操作系统...
    4ea0af17fd67阅读 3,233评论 0 0
  • 前言: 之前的文章《Java文件IO常用归纳》主要写了Java 标准IO要注意的细节和技巧,由于网上各种学习途径,...
    androidjp阅读 8,281评论 0 22

友情链接更多精彩内容