- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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的文件,内容与
您可能关注的文档
最近下载
- 初级育婴员初级育婴员ppt课件完整版.pptx VIP
- 2023年山东省曲阜市中考物理真题(历年真题)附答案详解.docx VIP
- 杜邦TPO防水衬垫系统超详细介绍.pdf VIP
- 2025儿童康复医学专业医疗质量控制指标专家建议解读课件.pdf
- 《事业单位工作人员处分规定》(2023)课件.ppt VIP
- GB50032-2003:室外给水排水和燃气热力工程抗震设计规范.pdf VIP
- 2026年上海高三物理高考重点知识点归纳总结(复习必背) .pdf
- 化工过程安全管理导则AQT 3034—2022知识培训.pptx VIP
- 天然气分输站流程整改施工方案.doc
- YY_T 1910-2023 用于增材制造的医用β-磷酸三钙粉末.pdf
文档评论(0)