快速业务通道

通过扩展RandomAccessFile类使之具备Buffer改善I/O性能 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

通过扩展RandomAccessFile类使之具备Buffer改善I/O性能(7)

时间:2011-06-19 崔志翔

与JDK1.4新类MappedByteBuffer+RandomAccessFile的对比?

JDK1.4提供了NIO类 ,其中MappedByteBuffer类用于映射缓冲,也可以映射 随机文件访问,可见JAVA设计者也看到了RandomAccessFile的问题,并加以改进 。怎么通过MappedByteBuffer+RandomAccessFile拷贝文件呢?下面就是测试程 序的主要部分:

RandomAccessFile rafi = new RandomAccessFile(SrcFile, "r");   RandomAccessFile rafo = new RandomAccessFile(DesFile, "rw");   FileChannel fci = rafi.getChannel(); FileChannel fco = rafo.getChannel();   long size = fci.size();   MappedByteBuffer mbbi = fci.map(FileChannel.MapMode.READ_ONLY, 0, size); MappedByteBuffer mbbo = fco.map(FileChannel.MapMode.READ_WRITE, 0, size); long start = System.currentTimeMillis(); for (int i = 0; i < size; i++) {       byte b = mbbi.get(i);       mbbo.put(i, b); } fcin.close(); fcout.close(); rafi.close(); rafo.close(); System.out.println("Spend: "+(double) (System.currentTimeMillis()-start) / 1000 + "s");

试一下JDK1.4的映射缓冲读/写功能,逐字节COPY一个12兆的文件,(这里牵 涉到读和写):

耗用时间(秒)
RandomAccessFile RandomAccessFile 95.848
BufferedInputStream + DataInputStream BufferedOutputStream + DataOutputStream 2.935
BufferedRandomAccessFile BufferedOutputStream + DataOutputStream 2.813
BufferedRandomAccessFile BufferedRandomAccessFile 2.453
BufferedRandomAccessFile优 BufferedRandomAccessFile优 2.197
BufferedRandomAccessFile完 BufferedRandomAccessFile完 0.401
MappedByteBuffer+ RandomAccessFile MappedByteBuffer+ RandomAccessFile 1.209

确实不错,看来JDK1.4比1.3有了极大的进步。如果以后采用1.4版本开发软 件时,需要对文件进行随机访问,建议采用 MappedByteBuffer+RandomAccessFile的方式。但鉴于目前采用JDK1.3及以前的 版本开发的程序占绝大多数的实际情况,如果您开发的JAVA程序使用了 RandomAccessFile类来随机访问文件,并因其性能不佳,而担心遭用户诟病,请 试用本文所提供的BufferedRandomAccessFile类,不必推翻重写,只需IMPORT 本类,把所有的RandomAccessFile改为BufferedRandomAccessFile,您的程序的 性能将得到极大的提升,您所要做的就这么简单。

未来的考虑

读者可在此基础上建立多页缓存及缓存淘汰机制,以应付对随机访问强度大 的应用。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号