恼——java的输入和输出操作

    最近,温习了学习《Java SE tutorial》、《Think in Java》、《Java2 核心技术》和google到的资料,都说道NIO的文件操作有很大幅度的性能提高。但是,但是根据书本例子和我自己写的程序,做同样的操作(比如按每行读100M的有中文和英文的文件)并没有提高,而且多处书本知识与自己写的测试小例子矛盾,Why???NIO的性能到底提高在哪些方面,又是怎么实现的呢?

    一个个疑问,不禁问自己:“难道,我在IO上的知识结构有问题?”

   还是问google吧……

   终于发现《Java 非阻塞通信研究》,看完这篇论文我有种“柳暗花明”的感觉。书上的知识没有问题,只是他们把我带入了一个误区,认为NIO是“超人”、是“万能的”。而且书上只是NIO的入门知识,对于整个NIO的体系结构和应用也不多。哎~~~自己弄得自己误入歧途。

   《Java 非阻塞通信研究》的引言内容:全文我放附件里了

 

I/O系统对应用程序的性能有至关重要的影响。Java平台传统I/O系统的构建基于两个核心概
念:Byte(字节)和Stream(数据流)。这种模式下,I/O系统的操作与处理是以字节为单位,导
致速度很慢。由于①JSR 51的面世,从JSDK1.4版本开始,Java引入了一组全新的I/O应用程序接口
(APIs)——NIO(New I/O),涉及到java.lang、java.net、java.io三个包的85个类的重新改写
和新类加入。②NIO系统的操作模式针对字节数组,而不是字节,从而加快了处理速度。同时,③NIO
提供了升级的套接字通道和文件I/O操作,④提供了一个正则表达的包来支持模式匹配,⑤提供了对字
符集转换的编码器和解码器,和⑥优化过的文件系统支持如文件锁定、⑦内存映射等功能。在JSDK1.4
平台上,文件处理和网络服务器程序的性能都得到了明显的改善。但,⑧NIO并不是java.io包的再
实现或取代,它的出现只是为了突破Java传统I/O包存在的限制,弥补Java传统I/O包的不足,满
足新的应用需求。并且,它并不是一个适于任何情况的工具。本文针对NIO的特性做出分析与阐述,
对网络应用中阻塞通信与非阻塞通信、NIO的非阻塞工作机制以及网络通信中非阻塞套接字的实现
进行了研究和探讨,提出了系统地实现非阻塞通信的方法。

 

①~⑧ 是我添加上去的标注。

   再次惭愧~~半吊子水

 

 ---------------------------------------------------------------------------------------------------------------------------

   Java SE tutorial对NIO包的描述:These packages provide APIs for scalabe I/O,fast buffered byte and character I/O,and character set conversion。(描述得太少了!)

   Think in java好像是这么说的:JDK1.4中java.nio.*包中映入了新的Java I/O类库,目的在于提高速度。速度的提高来自于锁使用的架构更接近于操作系统执行I/O的方式:通道和缓冲器。(看了这短话,不理解错才怪!!!一个比较老的版本,刚查了一下新版的Think in java写得要详细多了。)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值