IO NIO AIO 分析

IO分析讲解

Java的 I/O 操作类在包 java.io下,有将近80个类,这些类大概可以分成如下 4 组:

基于字节操作的 I/O 接口:InputStream 和 OutputStream;
基于字符操作的 I/O 接口:Writer 和 Reader;
基于磁盘操作的 I/O 接口:File;
基于网络操作的 I/O 接口:Socket;

不管是磁盘还是网络传输,最小的存储单元都是字节

Java 序列化技术

Java序列化就是将一个对象转化成一串二进制表示的字节数组,通过保存或转移这些字节数据来达到持久化的目的。需要持久化,对象必须继承 java.io.Serializable 接口,或者将其转为字节数组,用于网络传输;

网络 I/O 工作机制

NIO 的工作机制

很多人都把NIO翻译成New IO,但我更觉得No-Block IO更接近它的本意,也就是非阻塞式IO,它虽然是非阻塞式的,但它是同步的,我们先看一下 NIO 涉及到的关联类图,如下:
在这里插入图片描述
上图中有两个关键类:Channel 和 Selector 它们是 NIO 中两个核心概念。我们还用前面的城市交通工具来继续比喻 NIO 的工作方式,这里的 Channel 要比 Socket 更加具体,它可以比作为某种具体的交通工具,如汽车或是高铁等,而 Selector 可以比作为一个车站的车辆运行调度系统,它将负责监控每辆车的当前运行状态:是已经出战还是在路上等等,也就是它可以轮询每个 Channel 的状态。这里还有一个 Buffer 类,它也比 Stream 更加具体化,我们可以将它比作为车上的座位,Channel 是汽车的话就是汽车上的座位,高铁上就是高铁上的座位,它始终是一个具体的概念,与 Stream 不同。Stream 只能代表是一个座位,至于是什么座位由你自己去想象,也就是你在去上车之前并不知道,这个车上是否还有没有座位了,也不知道上的是什么车,因为你并不能选择,这些信息都已经被封装在了运输工具(Socket)里面了,对你是透明的。

NIO 引入了 Channel、Buffer 和 Selector 就是想把这些信息具体化,让程序员有机会控制它们,如:当我们调用 write() 往 SendQ 写数据时,当一次写的数据超过 SendQ 长度是需要按照 SendQ 的长度进行分割,这个过程中需要有将用户空间数据和内核地址空间进行切换,而这个切换不是你可以控制的。而在 Buffer 中我们可以控制 Buffer 的 capacity,并且是否扩容以及如何扩容都可以控制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: IO(输入输出)是指操作系统与硬件之间进行数据传输的过程。常见的IO操作包括读取和写入文件、网络数据传输等。 NIO (非阻塞IO)是Java中的一种IO编程方式,它支持非阻塞的数据传输,即程序在等待IO操作完成时不会阻塞。这样可以避免程序因等待IO而卡住的问题。NIO提供了异步通道、缓冲区等功能来支持高效的IO操作。 AIO (异步IO)是操作系统提供的另一种IO编程方式,它支持异步的数据传输。AIO允许程序在发起IO请求后立即返回,而不是等待IO操作完成。这样程序可以继续执行其他任务,避免因等待IO而阻塞。AIO在操作系统层面支持异步IO,而NIO是在Java语言层面支持异步IO. ### 回答2: IO,即Input/Output,是指计算机与外部设备之间进行数据传输的过程。传统的IO操作是同步的,即在进行IO操作时,程序会阻塞等待数据的读写完成。这种方式效率较低,因为程序在等待IO操作完成时无法做其他事情。 NIO,即New Input/Output,是Java在JDK1.4版本引入的一种新的IO模型。NIO可以实现非阻塞的IO操作,其核心是通过通道(Channel)和缓冲区(Buffer)来实现数据的读写。NIO通过选择器(Selector)实现了多路复用,一个线程可以同时处理多个通道的IO操作,实现了更高的效率。NIO适用于连接数较多且连接时间较短的场景,例如网络编程中的ServerSocketChannel和SocketChannel。 AIO,即Asynchronous Input/Output,是Java在JDK1.7版本引入的一种新的IO模型。AIO通过回调机制实现异步的IO操作,当IO操作完成后会触发回调函数的执行。AIO适用于连接数较少且连接时间较长的场景,例如网络编程中的AsynchronousServerSocketChannel和AsynchronousSocketChannel。相比于NIOAIO的优势是在IO操作完成前不需要阻塞线程,可以充分利用线程资源,并且编程模型更简单。 综上所述,IO是传统的同步IO模型,效率较低;NIO是一种非阻塞的IO模型,通过选择器实现了多路复用,效率较高;AIO是一种异步的IO模型,通过回调机制实现了非阻塞的IO操作,适用于连接时间较长的场景。在实际开发中,可以根据具体需求选择适合的IO模型来提高程序的性能和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值