查看: 9580|回复: 3

[精华] Java NIO与Java IO的分析比较

[复制链接]
论坛徽章:
63
2010广州亚运会纪念徽章:台球
日期:2010-10-18 12:43:48茶鸡蛋
日期:2013-01-09 10:59:002013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:帆船
日期:2013-04-02 17:07:052013年新春福章
日期:2013-04-08 17:42:48奥运纪念徽章
日期:2013-07-18 13:55:12优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11
发表于 2010-11-28 18:12 | 显示全部楼层 |阅读模式
《Java NIO与Java IO的分析比较》
【版权声明】:本文属于原创,转载需征得作者chszs的同意!

在这篇文章中,我们要来谈谈

1. Java.nio与java.io之间有什么区别?

2. 它们分别用于哪些场景? 即优点和缺点。

在Java编程中,早期的I/O通信使用流Stream编程实现。所有I/O被视为是单字节的活动,一次一个字节、通过一个称为流的对象实现。流I/O可用于与外界通信。流I/O也可用于内部通信,需要先把对象转换成字节码,返回时也需转码。

NIO和最初的I/O通信一样,有着相同的目标,也扮演着同样的角色,只是NIO使用了不同的metaphor- 块级I/O。 从JDK1.4版本开始,就引入了java.nio(new/non-blocking I/O)API。

流I/O和块I/O之间有什么不同?

面向流I/O的系统,一次处理一个字节的数据。一个输入流会产生一个字节的数据,而一个输出流同样一次消费一个字节的数据。对于流式数据,很容易创建过滤器。可以相对简单地把几个过滤器连接在一起,每个过滤器完成自己的工作,也是按字节进行过滤,精细的处理机制。另一方面,面向流I/O的通信往往比较缓慢。


面向块I/O的系统,以块为单位处理数据。每个操作步骤会生成或消费一个块的数据。以块为单位处理数据,其处理速度远快于以字节流为单位的方式。但是,与面向流I/O的通信相比,面向块I/O的通信缺乏优雅和简洁。

如果你阅读《Getting started with new I/O (NIO)》这篇文章,你可能会认为java.nio通信是目前已有的最佳解决方案。但事实并非如此。
文章链接如下:https://www.ibm.com/developerwor ... j-nio/section5.html

什么时候应该使用java.io?什么时候又该使用java.nio呢?

1、 可扩展性。这可能会促使你选择不同的软件包。Java.net需要每个Socket通信都有一个线程。编码将大为简化。java.nio更富有效率,但相对难以编码。

2、 在处理成千上万的连接时,你可能需要更好的扩展性;但是如果连接数较低时,你可能更注重块I/O的高吞吐率。

3、当使用SSL (Secure Sockets Layer,安全套接字层) 工作时,选择java.nio则实现难度很大。

注意:
如果你正在使用java.io或java.nio之一工作,那么从头开始创建框架不是一个好主意,除非你这样做有一个令人信服的理由。

对于java.nio包,有Grizzly 和Quick Server项目提供了可重用的非阻塞式的服务器组件。
值得加以研究和应用。
Grizzly链接:http://grizzly.java.net/
Quick Server链接:http://www.quickserver.org/

文章《Paint points with java.nio》值得一读。
文章链接如下:http://blog.uncommons.org/2008/0 ... -better-throughput/

最后,还是要归结到你的项目的具体要求和你所想要达到的目标。很多最好的解决方案并不需要复杂的基础架构!

[ 本帖最后由 chszs 于 2010-11-28 18:13 编辑 ]
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
发表于 2010-11-29 00:00 | 显示全部楼层
nice job

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2010-11-29 22:40 | 显示全部楼层
很不错的文章。

使用道具 举报

回复
论坛徽章:
104
生肖徽章2007版:猪
日期:2012-07-12 14:24:56菠菜神灯
日期:2013-05-26 22:03:18生肖徽章2007版:猪
日期:2012-07-19 11:10:12生肖徽章2007版:猪
日期:2012-07-19 11:10:12生肖徽章2007版:猪
日期:2012-07-11 19:07:11生肖徽章2007版:猪
日期:2012-07-19 11:10:12生肖徽章2007版:猪
日期:2012-07-19 11:10:12ITPUB伯乐
日期:2012-05-22 15:05:25NBA季后赛纪念徽章
日期:2013-06-21 14:52:05NBA季后赛大富翁
日期:2013-06-21 14:57:11
发表于 2012-4-9 23:31 | 显示全部楼层
嗯,不错,分析很透!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表