美文网首页Java 杂谈java程序员
第二节 netty前传-NIO简介

第二节 netty前传-NIO简介

作者: 勃列日涅夫 | 来源:发表于2018-10-15 22:12 被阅读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 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()方法。这个方法会一直阻塞到某个注册的通道有事件就绪(有消息推送过来)。一旦这个方法返回,线程就可以处理这些事件。

具体例子使用见下一节

相关文章

  • 第二节 netty前传-NIO简介

    Java NIO是Java的替代IO API(从jdk1.4开始),意味着替代标准Java IO和Java 网络A...

  • java-netty

    netty常用API学习 netty简介 Netty是基于Java NIO的网络应用框架. Netty是一个NIO...

  • netty

    netty起步 netty简介 1、Netty是基于Java NIO的网络应用框架。2、Netty是一个NIO c...

  • Netty 源码分析系列

    Netty 源码分析系列 Netty入门简介 深入浅出NIO之Channel、Buffer 深入浅出NIO之Sel...

  • netty原理分析

    Netty简介 Netty是一个高性能、异步事件驱动的NIO框架,基于JAVA NIO提供的API实现。它提供了对...

  • netty原理分析

    Netty简介 Netty是一个高性能、异步事件驱动的NIO框架,基于JAVA NIO提供的API实现。它提供了对...

  • 使用Redisson实现redis的分布式锁

    Redisson简介 Redisson在基于NIO的Netty[http://netty.io/]框架上,充分的利...

  • NETTY框架核心模块概述

    netty是一个NIO通信框架,但是要用好netty,需要深入理解JAVA IO, NIO以及netty NIO框...

  • Netty

    Netty简介   Netty的本质是一个NIO框架,是一个异步的、基于事件驱动(当有读写事件出现时,Netty进...

  • netty系列之:不用怀疑,netty中的ByteBuf就是比J

    简介 netty作为一个优秀的的NIO框架,被广泛应用于各种服务器和框架中。同样是NIO,netty所依赖的JDK...

网友评论

    本文标题:第二节 netty前传-NIO简介

    本文链接:https://www.haomeiwen.com/subject/cwfsaftx.html