快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
fy file         this.buf[(int)(pos - this.bufstartpos)] = bw;       } else if (((pos == 0) && (this.fileendpos == 0)) || (pos == this.fileendpos + 1)) { // write pos is append pos         this.buf[0] = bw;         this.fileendpos++;         this.bufusedsize = 1;       } else {         throw new IndexOutOfBoundsException();       }       this.bufdirty = true;     }     this.curpos = pos;     return true;   }

至此缓冲写基本实现,逐字节COPY一个12兆的文件,(这里牵涉到读和写, 结合缓冲读,用BufferedRandomAccessFile试一下读/写的速度):

耗用时间(秒)
RandomAccessFile RandomAccessFile 95.848
BufferedInputStream + DataInputStream BufferedOutputStream + DataOutputStream 2.935
BufferedRandomAccessFile BufferedOutputStream + DataOutputStream 2.813
BufferedRandomAccessFile BufferedRandomAccessFile 2.453

可见综合读/写速度已超越 BufferedInput/OutputStream+DataInput/OutputStream。

优化BufferedRandomAccessFile。

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

时间:2011-06-19 崔志翔

优化原则:

调用频繁的语句最需要优化,且优化的效果最明显。

多重嵌套逻辑判断时,最可能出现的判断,应放在最外层。

减少不必要的NEW。

这里举一典型的例子:

public void seek(long pos) throws IOException {     ... this.bufstartpos = pos * bufbitlen / bufbitlen; // bufbitlen指buf[]的位长,例:若bufsize=1024,则bufbitlen=10。 ... }

seek函数使用在各函数中,调用非常频繁,上面加重的这行语句根据pos和 bufsize确定buf[]对应当前文件的映射位置,用"*"、"/" 确定,显然不是一个好方法。

优化一:this.bufstartpos = (pos << bufbitlen) >> bufbitlen;

优化二:this.bufstartpos = pos & bufmask; // this.bufmask = ~ ((long)this.bufsize - 1);

两者效率都比原来好,但后者显然更好,因为前者需要两次移位运算、后者 只需一次逻辑与运算(bufmask可以预先得出)。

至此优化基本实现,逐字节COPY一个12兆的文件,(这里牵涉到读和写,结 合缓冲读,用优化后BufferedRandomAccessFile试一下读/写的速度):

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

可见优化尽管不明显,还是比未优化前快了一些,也许这种

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号