JavaNIO概览

关键字:

    .Channels and Buffers

    .Selectors



Java NIO 由下面三个核心组件组成

.Channels

.Buffers

.Selectors

Java NIO除了上面这三个组件之外,还有许多其他类和组件。但是Channel、Buffer、以及 Selector是主要的核心API。在我看来,其他的组件,如:Pipe 、FileLock 都是一些供核心组件使用的工具类。因此,我将聚焦于这三个核心组件上。其他组件会在其他篇幅中讲述。


1.Channel和Buffer

一般来说,NIO都是从Channel开始。 Channel有点像流stream。可以从Channel中把数据读到Buffer中,也可以从buffer中把数据写入到Channel中。

这里有个图例:


Java NIO: Channel把数据读入到Buffer中,Buffer把数据写入到Channel中

在Java NIO中有不少Channel和Buffer类型,下面列出一些主要的Channel实现:

   .FileChannel

  .DatagramChannel

  .SocketChannel

  .ServerSocketChannel

正如你看到的那样,这些channel既包含了UDP、TCP 网络IO也包含文件IO。

下面列出一些核心的Java NIO中的Buffer核心实现:

     .ByteBuffer

    .CharBuffer

    .DoubleBuffer

    .FloatBuffer

    .IntBuffer

    .LongBuffer

    .ShortBuffer

这些Buffer也包含了基本数据类型,这样你就可以通过IO去发送 byte,short,int ,long,float,double,以及字符类型的数据。  Java NIO中还有一个MappedByteBuffer,它主要是用于连接内存映射文件。我们稍后再讲这个Buffer。


2.Selectors

Selector 允许一个单线程处理多个Channel。 如果你的应用程序有许多连接(Channel)打开的话,这样是很方便的。但是每一个连接上却只有很少的流量。 例如,在一个chat server上,就可以这样做。

  这里有一个图展示了一个线程如何使用一个Selector管理3个Channel的:


一个线程使用一个selector管理3个channel

为了使用Selector,你首先需要把三个Channel注册到该Selector上。然后,你可以调用select()方法。这个方法会一直阻塞,直到这三个Channel中的其中一个有事件发生(event ready)。一旦这个方法返回,这个线程就能处理这些事件。这些事件例如:新连接到达事件,数据接收事件等。

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

相关阅读更多精彩内容

  • Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java I...
    编码前线阅读 6,738评论 0 5
  • Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java I...
    JackChen1024阅读 12,305评论 1 143
  • Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java I...
    zhisheng_blog阅读 4,842评论 0 7
  • 出自 Java NIO 系列教程原文地址 作者:Jakob Jenkov 译者:郭蕾 校对:方腾飞 [t...
    小小少年Boy阅读 4,470评论 0 4
  • 今天天是2017年的最后一天,时间飞逝,无法追赶。 去年的今天我踌躇满志,整装待发,而今天,我更加期待2018年。...
    Ply坤阅读 2,372评论 0 0

友情链接更多精彩内容