请你谈谈对Java NIO的理解

Java面试 潘老师 8个月前 (09-05) 167 ℃ (0) 扫码查看

Java面试题:请你谈谈对Java NIO的理解

得分点

  • Buffer(缓冲区)
  • Channel(通道)
  • Selector(多路复用器)

标准回答

新的输入/输出(NIO)库是在JDK 1.4中引入的,它弥补了原来同步阻塞I/O的不足,提供了高性能的、面向块的I/O。NIO包含了三个核心组件:Buffer(缓冲区)、Channel(通道)、Selector(多路复用器)。

Buffer(缓冲区)

  • Buffer是一个对象,它包含要写入或要读出的数据。
  • 在NIO库中,所有数据都是通过缓冲区处理的。读取数据时,数据被直接读入缓冲区中;写入数据时,数据被写入缓冲区。
  • 任何时候访问NIO中的数据,都是通过缓冲区进行操作。

Channel(通道)

  • Channel是一个通道,可以通过它读取和写入数据,类似于自来水管,网络数据通过Channel读取和写入。
  • 通道与流的不同之处在于通道是双向的,可以用于读、写或同时用于读写。
  • 由于Channel是全双工的,它更好地映射底层操作系统的API,特别是在UNIX网络编程模型中,底层操作系统的通道都是全双工的,同时支持读和写操作。

Selector(多路复用器)

  • Selector会不断地轮询注册在其上的Channel,如果某个Channel上有新的TCP连接接入、读取或写入事件,这个Channel就处于就绪状态。
  • 就绪的Channel会被Selector轮询出来,并通过SelectionKey可以获取就绪Channel的集合,从而进行后续的I/O操作。
  • 一个多路复用器Selector可以同时轮询多个Channel,由于JDK使用了epoll()代替传统的select实现,所以它没有最大连接句柄数量的限制,只需要一个线程负责Selector的轮询就可以接入成千上万的客户端。

加分回答

Java 7的NIO2提供了异步Channel支持,这种异步Channel可以提供更高效的IO,也被称为异步IO(Asynchronous IO)。NIO2为异步IO提供了两个接口和三个实现类,其中AsynchronousSocketChannel和AsynchronousServerSocketChannel是支持TCP通信的异步Channel。这进一步提高了Java NIO在处理高并发IO操作时的性能和效率。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/javainterview/8694.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】