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。

相关推荐
Bonnie_12154 天前
02-netty基础-java四种IO模型
java·开发语言·nio·jetty
双力臂4045 天前
Java IO流体系详解:字节流、字符流与NIO/BIO对比及文件拷贝实践
java·开发语言·nio
西岭千秋雪_7 天前
NIO网络通信基础
笔记·学习·计算机网络·nio
武子康12 天前
Java-72 深入浅出 RPC Dubbo 上手 生产者模块详解
java·spring boot·分布式·后端·rpc·dubbo·nio
Lyinj14 天前
jdk1.8 nio相关。java对象和epoll三大函数怎么关联的?(有点乱有点跳)
java·python·nio
武子康14 天前
Java-70 深入浅出 RPC Dubbo 详细介绍 上手指南
java·分布式·网络协议·spring·rpc·dubbo·nio
太阳伞下的阿呆19 天前
Tomcat/Jetty/Undertow对比
tomcat·nio·jetty·aio·undertow
笨手笨脚の1 个月前
Redis 源码分析-Redis 中的事件驱动
数据库·redis·缓存·select·nio·epoll·io模型
lifallen1 个月前
Netty内存池核心:PoolChunkList解析
java·网络·数据结构·算法·nio
Leaf吧1 个月前
java BIO/NIO/AIO
java·开发语言·nio