Java -- 每日一问:Java提供了哪些IO方式? NIO如何实现多路复用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java -- 每日一问:Java提供了哪些IO方式? NIO如何实现多路复用?相关的知识,希望对你有一定的参考价值。


Java

典型回答

Java IO 方式有很多种,基于不同的 IO 抽象模型和交互方式,可以进行简单区分。

第一,传统的 java.io 包,它基于流模型实现,提供了我们最熟知的一些 IO 功能,比如 File 抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。

java.io 包的好处是代码比较简单、直观,缺点则是 IO 效率和扩展性存在局限性,容易成为应用性能的瓶颈。

很多时候,人们也把 java.net 下面提供的部分网络 API,比如 Socket、ServerSocket、HttpURLConnection 也归类到同步阻塞 IO 类库,因为网络通信同样是 IO 行为。

第二,在 Java 1.4 中引入了 NIO 框架(java.nio 包),提供了 Channel、Selector、Buffer 等新的抽象,可以构建多路复用的、同步非阻塞 IO 程序,同时提供了更接近操作系统底层的高性能数据操作方式。

第三,在 Java 7 中,NIO 有了进一步的改进,也就是 NIO 2,引入了异步非阻塞 IO 方式,也有很多人叫它 AIO(Asynchronous IO)。异步 IO 操作基于事件和回调机制,可以简单理解为,应用操作直接返回,而不会阻塞在那里,当后台处理完成,操作系统会通知相应线程进行后续工作。

你的朋友是不是也在准备面试呢?你可以把今天的题目分享给好友,或许你可以帮到他。


以上是关于Java -- 每日一问:Java提供了哪些IO方式? NIO如何实现多路复用?的主要内容,如果未能解决你的问题,请参考以下文章

Java -- 每日一问:Java并发包提供了哪些并发工具类?

Java -- 每日一问:Java常见的垃圾收集器有哪些?

JAVA知识每日一问:Redis6.0为什么引入多线程?

Java -- 每日一问:有哪些方法可以在运行时动态生成一个Java类?

Java -- 每日一问:Java程序运行在Docker等容器环境有哪些新问题?

Java -- 每日一问:谈谈JVM内存区域的划分,哪些区域可能发生OutOfMemoryError?