java_NIO..docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java_NIO.

调用Java NIO提高文件读写速度2011年11月20日 22:11:33   Java NIO的出现旨在提高文件的读写速度,当然IO用NIO重新实过,所以我们不用显示的调用NIO也能享受这种高效的文件读写。   Java NIO的高效得益于其两大助手:Channel(管道)和Buffer(缓冲器)。当然这两个得力助手的年龄远远比java大!力求简单易懂的把知识讲解给大家,我举一个例子来说明一下这两元大将是如何在java NIO中配合工作的。   中国古代有一种传统的吸烟器具---水烟袋。我想用这个东西来模拟一下Channel和Buffer的工作原理。不求说的好,力求准确无误。 分析一下水烟袋是如何工作的:   第一步,准备工作,准备好上等烟丝;第二步,将水斗中装入适量的水,烟仓中装满烟丝并插入水斗中,然后再将烟管插入水斗中;第三步,点燃烟丝并吸气。香烟从烟仓产生,经过水的过滤进入水上的空闲区。第四步,享受吸烟的快感.....从这个例子中我们提取出主要对象烟,来分析一下它的运动轨迹。烟仓把烟生产出来,经过水的过滤飘到水上面的空闲区域,然后通过烟管进入人的体内。   如果上面的过程大家理解了,明白了,那么java NIO你已经了解了50%,至少你已经知道它的工作原理了。因为用NIO处理的数据和用水烟袋中吸烟很相似。我们分析一下NIO的工作原理,非常简单。   当然和吸烟一样我们首先必须有要用NIO来处理需求的欲望(这好比你想要吸烟了),比方说我想要将C盘下面的wk.txt文件进行备份,备份文件的名称为wk-bak.txt。类比刚刚吸烟的那个过程:   步骤一:准备工作,确定文件的位置,并将程序不可直接操作的文件转换成字符流的形式(这一步和上边吸烟实例的第一步没有什么差别,只是进行一些简单的准备工作)。 String?inFile?=?C:\\wk.txt; String?outFile?=?C:\\wk-bak.txt; FileInputStream?inf?=?new?FileInputStream(inFile); FileOutputStream?outf?=?new?FileOutputStream(outFile); ByteBuffer?buffer?=?ByteBuffer.allocate(1024);? ByteBuffer?buffer?=?ByteBuffer.allocate(1024);? ?   步骤二:创建文件输入管道,和文件输出管道。(这一步与上边吸烟的第二部稍有差别,因为Channel和Buffer是在读写的时候才发生的连接动作) //准备文件读取的管道--相当于烟仓和烟管FileChannel?inFc?=?inf.getChannel(); ? FileChannel?outFc?=?outf.getChannel(); ? Charset?charSet?=?Charset.forName(utf-8); ? //进行编码解码--相当于水斗中水的过滤作用 ? CharsetDecoder?decoder?=?charSet.newDecoder(); ? CharsetEncoder?encoder?=?charSet.newEncoder();?   步骤三:开始进行文件备份工作。 ?while(true)?{??????????? ? ?//准备向Buffer中写入数据--相当于点燃烟丝,完事具备只欠东风 ? ???????buffer.clear();???????????????????????? ? //进行字符编码?--相当于水的过滤作用 ? ???????CharBuffer?cb?=?decoder.decode(buffer); ? ???????ByteBuffer?bb?=?encoder.encode(cb); ? ???????????????????????? ? //数据经过编码以后暂存缓冲区--相当于经过水过滤后的烟暂停在水斗中 ? ????????????int?t?=?inFc.read(bb); ? ????????????if(t?==?-1)?{ ? ????????????????break; ? ????????????} ? ????????????????????????bb.flip(); ? ????????????????????????//将字节码写入目标文件--相当于烟已经进入到嘴里 ? ????????????outFc.write(bb); ? ????????}? ?   步骤四:检查文件是否备份成功。发现C盘下面多了一个wk-bak.txt的文件,内容与

文档评论(0)

bhzs + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档