美文网首页
Java NIO(1) 概述

Java NIO(1) 概述

作者: super_wing | 来源:发表于2017-09-20 16:44 被阅读0次

    什么是Java NIO

        NIO全名(NewInput/ Output),在java1.4中引入。NIO是一种同步非阻塞的IO模型。同步是指线程不断轮询IO事件是否就绪,非阻塞是指线程在等待IO的时候,可以同时做其他任务。同步的核心就是Selector,Selector代替了线程本身轮询IO事件,避免了阻塞同时减少了不必要的线程消耗;非阻塞的核心就是通道和缓冲区,当IO事件就绪时,可以通过写道缓冲区,保证IO的成功,而无需线程阻塞式地等待。

    JavaNIO由以下几个核心部分组成:

    1,Channels

    2,Buffer

    3,Selectors

        虽然JavaNIO中除此之外还有很多类和组件,但在我看来,Channel,Buffer和Selector构成了核心的API。其它的组建是基于这个三个核心组建的扩展,所再次不再赘述。

    1)Channel

    基本上,所有的IO在NIO中都从一个Channel开始。Channel可以认为其就是一个管道,Channel可以读Buffer中数据,也可以将数据写入Buffer。这里有个图示:

    Channel有好几种类型。下面是JAVA NIO中的一些主要Channel的实现:

    1,FileChannel

    2,  DatagramChannel

    3,  SocketChannel

    4,  ServerSocketChannel

    正如你所看到的,这些通道涵盖了UDP和TCP网络IO,以及文件IO。

    2) Buffer

    以下是Java NIO里关键的Buffer实现:

    1, ByteBuffer

    2, CharBuffer

    3, DoubleBuffer

    4, FloatBuffer

    5, IntBuffer

    6, LongBuffer

    7, ShortBuffer

    8, MappedByteBuffer

    这些Buffer覆盖了你能通过IO发送的基本数据类型:byte, short, int, long, float, double和char。以及MappedByteBuffer,用于表示内存映射文件。

    3)Selector

        Selector允许单线程处理多个Channel。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。例如,在一个聊天服务器中。

    这是在一个单线程中使用一个Selector处理3个Channel的图示:

        要使用Selector,得向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。

    相关文章

      网友评论

          本文标题:Java NIO(1) 概述

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