java中IO和NIO的概念是什么?NIO的组成有哪些?

BSO 2020-12-02 15:37:57 java常见问答 3619

大家学习java编程语言的最终目的都是希望通过它获得一份不错的工作和不菲的收入。所以大部分人都是需要面对面试官的提问的。今天就来为大家介绍一下面试时会提到的问题,一起来看看吧。

首先是,IO概念

传统的java.io包,它基于流模型实现。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。缺点则是IO效率和扩展性存在局限性。

然后是,NIO概念:

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

NIO指新IO,核心是同步非阻塞,解决传统IO的阻塞问题。操作对象是Buffer。其实NIO的核心是IO线程池。 

NIO中的IO多路复用调用系统级别的select和poll模型,由系统进行监控IO状态,避免用户线程通过反复尝试的方式查询状态。

接下来是,NIO 的主要组成部分:

Buffer,高效的数据容器,除了布尔类型,所有原始数据类型都有相应的Buffer实现。

Channel:类似在Linux之类操作系统上看到的文件描述符,用来支持批量式IO操作的一种抽象。

Selector,是NIO实现多路复用的基础,它提供了一种高效的机制,可以检测到注册在Selector上的多个Channel中,是否有Channel处于就绪状态,进而实现了单线程对多Channel的高效管理Selector同样是基于底层操作系统机制。

Chartset,提供Unicode字符串定义

另外补充一些相关的知识:

区分同步或异步:同步操作时,后续的任务是等待当前调用返回,才会进行下一步;而异步则相反,其他任务不需要等待当前调用返回。

区分阻塞与非阻塞:在进行阻塞操作时,当前线程会处于阻塞状态,无法从事其他任务,只有当条件就绪才能继续,比如ServerSocket 新连接建立完毕,或数据读取、写入操作完成;而非阻塞则是不管IO操作是否结束,直接返回,相应操作在后台继续处理。

Java NIO: 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

这些问题在面试的时候是很有可能会遇见的,所以提前了解一下也是为了以备不时之需。java中很多知识还是具有一定的复杂性的。如果你想要了解更多Java面试题,敬请关注奇Q工具网。

推荐阅读:

java常见面试题:OSI 的七层模型都有哪些?

java常见面试题:如何防范Web攻击?

java常见面试题:OSI 的七层模型都有哪些?