ImageVerifierCode 换一换
格式:DOC , 页数:5 ,大小:105KB ,
资源ID:1754944      下载积分:10 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-1754944.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(使用NIO提高Java应用输入输出性能.doc)为本站会员(gs****r)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

使用NIO提高Java应用输入输出性能.doc

1、1使用 NIO 提高 Java 应用输入输出性能摘要:文章介绍了 I/O 在计算机系统中的重要性,指出 Java 语言早期的 Stream 式 I/O 模型存在性能问题,引出 NIO 模型及其两个关键接口 Channel 和 Buffer,介绍了它们的创建和使用方法,并从源代码的角度给出其具体说明。 关键词:输入输出 NIO 块操作 Channel Buffer 0 引言 I/O 是“输入输出”的英文缩写,指系统间数据交换的过程。I/O 系统是计算机系统的重要组成部分,承担着计算机系统内部之间或与外部沟通的桥梁。由于其重要性,现代操作系统均内置了 I/O 操作的底层实现,软件开发人员的任务是设

2、计具体的调用形式和过程。 在早期的 Java 语言中,I/O 操作主要依靠 Stream 模型实现,类库中包含了一些特色鲜明的 Stream 类供开发人员反复利用。该模型将 I/O 看作字节的单列顺序移动,这种思想便于软件开发人员学习和使用,能够方便地建立编程框架,编写出简洁而优美的代码。但是,有一个不容忽视的问题在数据密集型应用中,通常不能满足性能需求,这是因为Stream 模型每次只读取一个字节。当时,开发人员通过编写 Native 代码绕过 Stream 模型,缺点是付出安全性和可移植性等方面的代价。 为了解决上述问题,Java 语言引入了 NIO,它以标准 Java 代码的方式弥补了

3、Stream 模型的不足,并提供了一些新的功能。 21 NIO 简介 NIO 是“新的输入输出”的英文缩写,通过利用操作系统的底层优化,以块的方式实现高速的 I/O 操作。它为所有的原始类型提供 Buffer 支持、字符集编码解码解决方案、锁功能、内存映射文件以及多路非阻塞式网络 I/O 。NIO 的核心是 Channel 和 Buffer 两个接口,几乎在每个 I/O操作中都要使用它们。 2 Buffer 与 Channel 在 NIO 中,所有数据都是缓冲处理的,Buffer 接口充当着容器的角色。本质上,Buffer 实现类包装一个特定长度的基本数据类型数组,提供高级的访问方法,跟踪读、

4、写进程。在 I/O 操作时,数据首先进入Buffer 对象,然后从 Buffer 对象中读取或者向其中写入。 Channel 的角色类似于 Stream,但前者有两个明显优势,其一是可以一次读取或写入一个 Buffer 的数据而非一个 Byte;其二是 Channel 是双向的,既可以读,也可以写,甚至同时读和写,这更符合一些操作系统的底层实现。 3 输入数据 这里以读入文件数据为例说明 NIO 输入功能的使用方法,分为三个简单步骤。第一步,获取 FileChannel: FileInputStream fis = new FileInputStream( “foo“ ) ; FileChan

5、nel fc = fis.getChannel() ; 第二步,创建一个缓冲区,缓冲区的类型和大小依实际需求而定,这里创建一个可容纳 1024 字节的缓冲区: 3ByteBuffer buffer = ByteBuffer.allocate( 1024 ) ; 第三步,使用 Channel 将数据读入到 Buffer 中: fc.read( buffer ) ; 在这个过程中,不需要告诉 Channel 需要读多少数据,Buffer 内部机制会决定待读取的数据量。 通过以上三步,文件中的数据已经以字节的形式存储在 Buffer 中,可以使用 get 方法取出并做后续处理。 4 输出数据 与输入

6、数据类似,这里同样以文件数据的形式说明 NIO 输出功能的使用方法,分为三个简单步骤。第一步,获取 FileChannel: FileOutputStream fos = new FileOutputStream( “foo“ ) ;FileChannel fc = fos.getChannel() ; 第二步,创建一个缓冲区,缓冲区的类型和大小依实际需求而定,这里创建一个可容纳 1024 字节的缓冲区,然后向其中填入待写入的数据:其中,put 方法与上文 get 方法相对,用于向 Buffer 中添加数据,新的 flip 方法设置 Buffer 的内部状态,通知 Buffer 准备好即将进行

7、的输出操作。 第三步,使用 Channel 将从 Buffer 中写出: fc.write( buffer ) ; 如果 Buffer 中的数据小于创建时的长度,写出操作会根据实际长度4大小进行调整。 5 输入输出结合应用 这里给出一个数据中转的例子,用以说明如何将一个 Buffer 实例同时应用到读和写的过程中。 其中,如果 read 方法的返回值为-1,表明数据已经读完;新的clear 方法与 flip 方法类似,重设 Buffer 内部状态,使它准备接收新的数据。 6 总结 以上示例中没有包含异常处理的代码,目的在于向读者清晰明了地说明 NIO 的使用方法,从中可以看出,NIO 并没有明

8、显增加 Java 语言程序的代码量,与 Native 代码方式比较,在满足安全性和可移植性要求的情况下,提供了相似的性能,降低了后期维护成本,不失为一种优秀的I/O 模型,应该被推广使用。 参考文献: 1李晓华.深入 Java 编程技术讲座之六-Java 输入输出.北京:电脑编程技巧与维护J.1999,3. 2封玮,周世平.基于 Java NIO 的非阻塞通信的研究与实现。北京:计算机系统应用J.2004,9. 3姜力.基于 Java NIO 反应器模式设计与实现.大庆:大庆师范学院学报N.2008,3. 4曾自强.基于 NIO 的 java 高性能网络应用的技术研究J.北京:北京邮电大学.2009,2. 55张雷.基于 JAVA 技术的输入输出流系统应用性分类研究.重庆:自动化与仪器仪表J.2011,4. 6蔡天鸣,王若愚.Java SE7 平台下的 NIO.2 探析.武汉:软件导刊J.2011,8.

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。