Java的IO、NIO、AIO了解

本文介绍了Java的IO、NIO和AIO。BIO是同步阻塞IO,适合简单场景;NIO提供Channel、Buffer和Selector,实现同步非阻塞,适合多路复用;AIO,又称NIO2,实现异步非阻塞,基于事件和回调,提升性能。
摘要由CSDN通过智能技术生成

java提供了IO、NIO、AIO包,用于处理输入输出。

BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制
 

IO

IO就是我们常用的 java.io包,它基于流模型,提供了File 抽象、输入输出流等。因为是同步阻塞的,也有人称为BIO。好处就是可靠,返回后可以立刻知晓结果。
按数据分:字符流(InputStream、OutputStream)、字节流。
按操作分:输入流、输出流。

注:IO流的缓冲区是用来提高效率的。

 

NIO

NIO的三个主要组成部分:Channel(通道)、Buffer(缓冲区)、Selector(选择器)。它们关系可以简单下图说明:

 

Channel

可以通过它读取和写入数据,类似IO中的流,不过它可以用于读、写或者同时用于读写。一个Channel绑定一个Buffer。
FileChannel
DatagramChannel
SocketChannel
ServerSocketChannel

Buffer

NIO有如下 buffer:
ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer
这些Buffer类型代表了不同的数据类型。换句话说,就是可以通过char,short,int,long,float 或 double类型来操作缓冲区中的字节。

Selector

Selector 对象上可以注册很多个Channel,监听各个Channel上发生的事件,当事件发生时决定Channel读写。这样使用Selector就可以做到用一个线程来处理所有的channels,毕竟线程之间的切换的代价很高。

创建selector

Selector selector = Selector.open();

注册channel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值