nio

本文对比了NIO(New IO)与传统IO的区别,详细介绍了NIO的特点与优势,包括通道(Channel)、缓冲区(Buffer)及选择器(Selector)等核心概念。尤其适合需要处理大量并发连接的应用场景。

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

NIO
nio优势
channel分类
filechannel
socketchannel
serversockerchannel
datagramchannel
是双向的 既可以读又可以写
通道之间传递
同一种通道 transform
不同通道transto 不同通道之间进行传递
selector
如果你的应用打开了多个连接,每个连接的流量很低。使用selector会很方便
thread
selector
channel
channel
channel
channel
单线程考虑
selector.open
channel注册到selector中
SelectionKey key = channel.register(selector,  
    Selectionkey.OP_READ);  
selectKey
interest
channel
ready
选择通道
wakeup
close
buffer
基本数据类型buffer
mapbuffer 处理映射文件
读写数据
写入数据到buffer
调用flip方法
模式切换 从写模式到读模式
从buffer中读取数据
buufer。clear compact
三个属性
capacity 容器
position
limit 写多少 可以读出的数量
put
channel 到 buffer
buffer - out - buffer
get
mark reset 
eauqls 和 compareTo
Scatter gather
和传统io的区别
1.具有channel和buffer 数据不经过字节字符 是通道和缓冲区之间进行数据交换
nio面向缓存
io面向流
2.可以异步asynchronous
blocking
non blocking
3.selector可以监听通道时间
可以来进行分配线程
疲软
实例使用纯粹的io
InputStream input = … ; // get the InputStream from the client socket  
BufferedReader reader = new BufferedReader(new InputStreamReader(input));  
  
String nameLine   = reader.readLine();  
String ageLine    = reader.readLine();  
String emailLine  = reader.readLine();  
String phoneLine  = reader.readLine();
可以清楚知道那些方法执行完毕
如果你有少量的连接使用非常高的带宽,一次发送大量的数据,也许典型的IO服务器实现可能非常契合。下图说明了一个典型的IO服务器设计:
使用纯粹的nio
ByteBuffer buffer = ByteBuffer.allocate(48);  
int bytesRead = inChannel.read(buffer);  
while(! bufferFull(bytesRead) ) {  
bytesRead = inChannel.read(buffer);  
}  
不知道是否在预期时间预期方法执行完毕
NIO可让您只使用一个(或几个)单线程管理多个通道(网络连接或文件),但付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂。 


如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,实现NIO的服务器可能是一个优势。同样,如果你需要维持许多打开的连接到其他计算机上,如P2P网络中,使用一个单独的线程来管理你所有出站连接,可能是一个优势
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值