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概览的主要内容,如果未能解决你的问题,请参考以下文章