Java NIO 之 概述

Java NIO 之 概述Java IO基于不同的IO抽象模型和交互方式,可简单分为以下几种:1.传统的 java.io 包,它基于流模型实现。交互方式是同步、阻塞的方式

大家好,欢迎来到IT知识分享网。

Java IO基于不同的IO抽象模型和交互方式,可简单分为以下几种:

1.传统的 java.io 包,它基于流模型实现。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里。

2.在 Java 1.4 中引入了 NIO 框架(java.nio 包),提供了 Channel、Selector、Buffer 等新的抽象,可以构建多路复用的、同步非阻塞 IO 程序。

3.在 Java 7 中,NIO 有了进一步的改进,也就是 NIO 2,引入了异步非阻塞 IO 方式,也有很多人叫它 AIO(Asynchronous IO)。异步 IO 操作基于事件和回调机制。

接下来,我们就一起来看以下Java NIO。

Java NIO由以下三个核心组成:

  • Channel
  • Buffer
  • Selector

1.Channel和Buffer

基本上NIO都是从Channel开始的,Channel有点像流。数据可以从Channel读到Buffer中,也可以从buffer读到Channel中,如下图:

Java NIO 之 概述

示例图1

Java NIO中Channel有以下几种主要实现:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

以上Channel实现涵盖了UDP 、TCP 、网络IO,以及文件IO。

Java NIO中Buffer有以下几种主要实现:

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

以上Buffer实现覆盖了通过IO发送的基本数据类型:byte, char, double,float,int, long和short。

2.Selector

Selector允许单个线程处理多个Channel。在某些场景下,需要建立多个连接,但每个连接的流量都不大,这时候就比较适合用Selector。如下图:

Java NIO 之 概述

示例图2

要使用Selector,要先把Channel注册到Selector上,然后调用Selector的selec()方法,该方法会一直阻塞直到注册到该Selector的某一个Channel有事件就绪,这时方法才会返回,线程就可以处理接收到的事件了。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/46301.html

(0)
上一篇 2024-04-22 18:15
下一篇 2024-04-22 20:15

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信