关于java:Java面试IO和NIO有什么区别

57次阅读

共计 941 个字符,预计需要花费 3 分钟才能阅读完成。

IO 问题始终是面试的重灾区之一

但又是十分重要而且面试必问的知识点

一个工作了 7 年的粉丝私信我,他去面试了 4 家互联网公司,

有三个公司问他网络 IO 的问题,另外一个公司问了 Netty,后果都没答复上来。

好吧,对于“IO 和 NIO 的区别”,看看普通人和高手的答复。

普通人:

嗯。。。。。。。。。。

高手:

好的,对于这个问题,我会从上面几个方面来答复。

首先,I/O,指的是 IO 流,它能够实现数据从磁盘中的读取以及写入。

实际上,除了磁盘以外,内存、网络都能够作为 I / O 流的数据起源和目的地。

在 Java 外面,提供了字符流和字节流两种形式来实现数据流的操作。

其次,当程序是面向网络进行数据的 IO 操作的时候,Java 外面提供了 Socket 的形式来实现。

通过这种形式能够实现数据的网络传输。

基于 Socket 的 IO 通信,它是属于阻塞式 IO,也就是说,在连贯以及 IO 事件未就绪的状况下,以后的连贯会处于阻塞期待的状态。

如果一旦某个连贯处于阻塞状态,那么后续的连贯都得期待。所以服务端可能解决的连贯数量十分无限。

NIO,是 JDK1.4 外面新增的一种 NEW IO 机制,相比于传统的 IO,NIO 在效率上做了很大的优化,并且新增了几个外围组件。

Channel、Buffer、Selectors。

另外,还提供了非阻塞的个性,所以,对于网络 IO 来说,NIO 通常也称为 No-Block IO,非阻塞 IO。

也就是说,通过 NIO 进行网络数据传输的时候,如果连贯未就绪或者 IO 事件未就绪的状况下,服务端不会阻塞以后连贯,而是持续去轮询后续的连贯来解决。

所以在 NIO 外面,服务端可能并行处理的链接数量更多。

因而,总的来说,IO 和 NIO 的区别,站在网络 IO 的视角来说,前者是阻塞 IO,后者是非阻塞 IO。

以上就是我对这个问题的了解。

总结

在互联网时代,网络 IO 是最根底的技术。

无论是微服务架构中的服务通信、还是利用零碎和中间件之间的网络通信,都在体现网络 IO 的重要性。

如果想取得一对一的面试领导以及面试材料,能够私信我。

版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自 Mic 带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!

正文完
 0