当前位置: 首页 > 后端技术 > Java

【Java专访】IO和NIO有什么区别?

时间:2023-04-02 01:16:32 Java

IO问题一直是面试中的重灾区之一,但是很重要,面试中一定要问。一位工作7年的粉丝私信给我。他去面试了4家互联网公司,3家公司问他关于互联网IO的问题,另一家公司问Netty,也没有答案。好吧,对于“IO和NIO的区别”,看看普通人和专家的回答。普通人:嗯。.........师父:那我从以下几个方面来回答这个问题。首先,I/O是指IO流,可以实现对磁盘数据的读写。事实上,除了磁盘,内存和网络也可以用作I/O流的数据源和目的地。Java中提供了字符流和字节流两种方式来实现对数据流的操作。其次,当程序面向网络进行数据IO操作时,Java提供了Socket方法来实现。这样就可以实现数据的网络传输。基于socket的IO通信是阻塞IO,即当连接和IO事件都没有准备好时,当前连接会处于阻塞等待状态。如果一旦连接被阻塞,则后续连接必须等待。所以服务器能处理的连接数是非常有限的。NIO是JDK1.4中新加入的NEWIO机制。与传统IO相比,NIO大大优化了效率,增加了几个核心组件。通道、缓冲区、选择器。此外,它还提供了非阻塞特性,所以,对于网络IO,NIO通常也被称为No-BlockIO,非阻塞IO。也就是说,当通过NIO传输网络数据时,如果连接没有准备好或者IO事件没有准备好,服务器不会阻塞当前连接,而是会继续轮询后续的连接进行处理。因此,在NIO中,服务器可以并行处理更多的连接。所以,总的来说,IO和NIO的区别,从网络IO的角度来说,前者是阻塞IO,后者是非阻塞IO。以上是我对这个问题的理解。总结在互联网时代,网络IO是最基础的技术。无论是微服务架构中的服务通信,还是应用系统与中间件之间的网络通信,都体现了网络IO的重要性。想领取一对一面试指导和面试资料的可以私信我。版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!