Java中的IO-NIO

首先Java中的IO有以下三种:
BIO(Blocking IO)  同步式阻塞IO
NIO(Non-BlockingIO/New IO)  同步式非阻塞IO   JDK1.4提供 
AIO(AsynchronousIO)  异步式非阻塞IO  JDK1.8提供

BIO vs NIO

BIONIO
一对一连接一对多连接
线程阻塞线程非阻塞
单向传输双线传输
适用请求少,长连接的场景适用于请求多,短连接的场景

NIO
NIO是jdk1.4提供的用于数据传输的流。主要有三大组件:
⚪ Buffer
⚪ Channel
⚪ Selector

1.Buffer 缓冲区
Buffer是用于存储数据的容器,在内存中占了一块连续的空间,本质上是一个数组,Java中针对基本类型提供了不同的的缓冲区(没有Boolean),ByteBuffer(字节缓冲区)是最基本的缓冲区。
ByteBuffer 继承了Buffer类,底层是靠字节数组来存储数据,是一个抽象类,需要用其子类创建对象,或者用提供的allocate/wrap方法来创建对象
重要的位置(4个):capacity>=limit>=position>=mark
capacity:容量位,表示缓冲区容量,创建好后不再改变
limit:限制位,用于限制操作(position)时能达到的最大位置,缓冲区刚创建时位于capacity位置
position:操作位,表示当前操作的位置,缓冲区刚创建时位于0
mark:标记位,用于操作过程中标记,缓冲区刚创建时位于-1,默认不开启
常用的API:
在这里插入图片描述
2. Channel通道
用于数据传输,面向缓冲区,可以实现双向传输。
channel默认是阻塞的,需要手动调整成非阻塞。
三种类型:
1)FileChannel:面向文件的通道,用于对文件的读写
2)UDP:用于进行UDP收发的通道,是无连接的网络协议,只能进行发送和接受的操作。基本类是DatagramChannel,是一个抽象类。
3)TCP:用于TCP的通信通道,有连接的网络协议,可以进行连、接、读、写操作。客户端通道时SocketChannel,服务器通道是ServerSocketChannel。

  1. Selector 多路复用选择器
    对通道进行选择,需要基于事件来驱动。主要是四类事件:connect、accept、read、write,全部定义在SelectionKey中。
    可以实现利用一个和少量线程完成大量请求的的场景,不适用于长任务场景,并且selector只是针对非阻塞的通道的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值