Java NIO概览

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java NIO概览相关的知识,希望对你有一定的参考价值。

所有文章

https://www.cnblogs.com/lay2017/p/12901123.html

 

正文

Java NIO包含了一下核心组件

1.channel:通道

2.buffer:缓冲区

3.selector:选择器

Java NIO软件包有很多类,但是最核心的就是这三种。所以本文重点关注着三个

channel和buffer

比较典型的是,在NIO中,所有的IO操作的发生都从channel开始。你可以暂时把channel理解成BIO中的流。我们可以从channel中读取数据到buffer,也可以把buffer里的数据写入到channel当中,如图所示:

和流一样,channel会有多种实现,以下是几个比较核心的channel实现:

1.FileChannel

2.DatagramChannel

3.SocketChannel

4.ServerSocketChannel

我们可以看到,channel主要是包含了两大类:网络IO、文件IO。

那么再看看buffer的核心实现类:

1.ByteBuffer

2.CharBuffer

3.DoubleBuffer

4.FloatBuffer

5.IntBuffer

6.LongBuffer

7.ShortBuffer

我们看到,除了Bool类型的基础类型之外都有一个buffer的实现,也就是说你可以直接将这些基础类型的数据直接存储在buffer里面而不用转换。

除了以上的buffer之外,还有一个比较重要的buffer叫做MappedByteBuffer,是一个用于文件内存映射的buffer,将会在其它文章说明。

Selector

选择器允许一个单线程管理多个channel,也就是说你可以使用尽可能少的线程来处理尽可能多的IO操作,如图:

要使用selector,你需要将channel先注册到selector当中,然后调用selector的select方法。

select方法会使得线程阻塞,直到有channel出现变化的事件返回,该线程将会处理这个事件。(例如:连接打开事件、数据达到事件等)

 

以上是关于Java NIO概览的主要内容,如果未能解决你的问题,请参考以下文章

Java NIO 概览

Java NIO 概览

Java NIO 概览

Java NIO(一)

Channel延续篇

Java NIO2 File API介绍