nio java是什么_Java NIO到底是个什么东西?

NIO其实是一个组装词汇,它的本意是New IO,这个是JDK1.4中引入的一个IO库,顾名思义,就是一个新的的IO库,采用了全新的实现方式来完成IO操作。

那么我们来看一下New IO到底有和老的IO有什么变化和区别。

Java IO和Java NIO最大的区别就是IO是面向流,NIO面向缓冲区。

面向流意味着每次从流中读取一个或者多个字节,直到读取完所有字节,他没有被缓存到任何地方,也不能移动流中的数据,比较僵硬的一个操作方式。

而面向缓冲区,则读取数据到一个可以稍后处理的缓冲区内,这个缓冲区内可以适当处理和调整数据,当然缓冲区也不是无限大,所以要确保前面读取的数据及时读出,防止被后面的数据覆盖。但是这样一来,灵活性已经有了很大的提升。

打个比方,一个人从车上搬运砖块下车,面向流就是按顺序搬运少量砖头,但是每次上车下车的消耗可能才是最累人的,面向缓冲区则是可以整理出一堆砖头进行批量搬运,比如一次可以搬运100块,节省了搬运次数,然后这100块砖头在等待被搬运的时候还能稍微做一下处理,比如把破碎的砖头放在中间,这样就不会掉出去。

Java IO和Java NIO另一个很大的区别是阻塞和非阻塞。

Java IO的各种流是阻塞的,这意味着当一个线程调用read()或者write()的时候,该线程阻塞,不能处理其他任何事情,直到该数据被读取或者写入完成。

Java NIO是非阻塞的,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用,就什么都不会获取,也不会使得线程阻塞等待数据。写入数据也是同样,一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程可以同时干其他事情。一个单独的线程现在可以管理多个输入和输出通道。

而管理多个通道靠的是选择器(Selectors),可以把这个想象成一个交警,指挥着各个通道的数据有序地处理而不会形成阻塞。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值