NIO与IO理解

NIO与IO

  • io和nio都可以用来处理数据传输,底层实现及效率方面有所不同

区别

  1. io是阻塞方式,nio是非阻塞方式
    • io是一种传统的数据阻塞传输方式,也就是说,在传输多个文件时,只能依次读写,只有一个任务执行完成,下一个任务才可以开始
    • nio是非阻塞的数据传输方式,会将数据直接读到缓冲区,然后从缓冲区获取数据,采用的是一种预读的方式,而且会使用多个channel进行数据读取,在没有读取完成时,程序会继续执行,如果读取数据完成,则会通知程序,处理当前数据
  2. io是面向流,nio是面向块,也就是面向buffer
    • io传输方式是:按照字节传输,一次只处理一个字节的数据
    • nio传输方式是:将数据预读到buffer缓冲区中,使用的时候直接去缓冲区拿

nio组件

  • buffer:用来存储数据的缓冲区,在读取数据时,会将数据临时存储在缓冲区,缺点是,必须保证缓冲区数据的完整性,如果读取数据不完成,则缓冲区中的数据就不完整,导致write的时候数据丢失

在io中包装流也有buffer的存在,但在io中,是通过流读取到缓冲区中,而nio是直接读取到缓冲区中

  • channel:读取数据的管道,每条数据都必须通过管道读取到缓冲区,类似io中的stream,除了fileChannel之外,其他channel都能以非阻塞方式执行
  • selector:用来处理不同管道的执行,包装channel处于非阻塞的状态,合理利用channel资源

ps:
1. 如果处理较大文件,文件数量较少时,使用io效率要高于nio,因为io是一种直连接,而且不需要多次创建和打开连接
2. nio适合数量较多,数据较少的场景,例如聊天室这种数据较少,需要多次连接的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值