NIO相关复习

本文详细比较了Java NIO与传统IO在数据处理、非阻塞特性、组件构成(缓冲区、通道和选择器)以及在服务器通信中的优势。通过实例阐述NIO读写数据方式,并介绍IO复用模型,探讨NIO在提高并发性能方面的价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.IO与传统NIO的区别
传统IO是一次一个字节地处理数据,NIO是以(缓冲区)形式处理数据。最主要的是NIO可以实现非阻塞,传统IO只能是阻塞的。

Java NIO使我们可以进行非阻塞IO操作。比如说,单线程中从通道读取数据到buffer,同时可以继续做别的事情,当数据读取到buffer中后,线程再继续处理数据。写数据也是一样的。另外,非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。

Java IO的各种流是阻塞的。这意味着,当一个线程调用 read() 或 write() 时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了
服务端与客户端的传输 NIO的优点就非常明显了 比如socket

2.NIO组成
NIO有三个核心部分
buffer 是存储数据的地方
在NIO厍中,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的; 在写入数据时,写入到缓冲区中。任何时候访问NIO中的数据,都是通过缓冲区进行操作

Channel是运输数据的载体
通道是双向的,可读也可写,而流的读写是单向的。无论读写,通道只能和Buffer交互。因为 Buffer,通道可以异步地读写。

Selector用于监控多个Channel的状态
选择器用于使用单个线程处理多个通道
在这里插入图片描述
3.NIO 读数据和写数据方式
通常来说NIO中的所有IO都是从 Channel(通道) 开始的。

从通道进行数据读取 :创建一个缓冲区,然后请求通道读取数据。
从通道进行数据写入 :创建一个缓冲区,填充数据,并要求通道写入数据。
在这里插入图片描述

补充·········
IO复用模型
通过一个进程监听多个文件描述符,一旦某个文件描述符准备就绪,就会通知程序做相应的处理。
优点体现在一个进程就能处理更多的连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值