java的nio包(1)

之前,在项目开发中,我并没有深入的使用过java的IO,最近自己想做一个小项目,需要用到IO,于是自己想尝试一下java中的NIO。由于以前很少使用IO进行项目级别的学习,所以并不能对IO和NIO进行细致的对比。只是简单介绍一下NIO的一些东西,并结合自己项目的开发进度,进行一些简介和说明。

在国庆假期期间,回家看了一下父母,闲暇之余找到了一份NIO的教程,并且发现,该教程的存放地是一个宝库。共享给大家:原地址,如果英语不好,我也不会抛弃你,中文翻译版

看到了博文,并不代表我学会了NIO,下面说说我对NIO的理解。

首先,IO是指输入输出,指的是程序的输入输出,最常见的是针对硬盘(最常见的是针对文件)的输入输出和网络的输入输出。如果不了解java标准IO和NIO的区别,就没办法发挥NIO的最大效能,说道IO和NIO的区别,我的几个小伙伴都直接告诉我,一个是同步的(IO),一个是非同步的(NIO),非同步的要比同步的快!but why.

      我们先来看一下标准IO和NIO的工作原理区别,拿一个读取任务来说,假定该任务为T:

1、标准IO会尝试读取

2、如果数据没有准备完成,则返回第一步。

3、如果数据准备完成,则读取,直至完成。整个过程没有中断,完全一体,同步的。

而NIO是酱紫的:

1、NIO尝试读取

2、读取完成,如果数据准备完成,则全部读取,如果数据没有准备完成返回失败!(注意,是返回失败).

如果这样,你和我说,NIO比IO快,并且是因为非同步的原因快。如何能说服我呢。

可是仔细想想,在IO中,尤其是网络IO中,标准IO处理过程中的第二步,会经常发生。这样,标准IO在读取过程中,可能会持续很长时间,最起码对计算机来说是很长的。试想两种情况,第一种是IO顺畅的时候,平均IO读取时间是t1,第二种是IO不太顺畅的时候,平均IO读取时间是t2,并且假设t2 = t1 + (1/3)t1,这样,第二种情况下,IO的并发量就相当于增加了三分之一,多么恐怖。

这个时候,NIO就牛×了,首先读取,不管能不能读,读取结束。不会持续尝试读取,占用资源,如果这个IO结果是必须的,那么大不了你过一段时间再来读取一次。避免了IO的持续尝试和占用。

我们已经分析清楚了,NIO的优势并没有在提高效率方面,而是在减少并发方面。NIO是降低IO并发量,并不是直接提升效率。

没有绝对的好事儿,NIO也是,上面NIO的执行过程我们看了,这个东东是存在问题的,如果IO读取的数据是必须需要的,不能因为数据没有准备好,我们就放弃读取,这个时候,我们就需要重新进行读取(虽然重新读取,但第一次读取的过程已经打断),这样就需要我们单独控制。增加了使用的难度。

具体的使用,我会在后面的博文中阐述。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值