读书人

高效率的RandomAccessFile【续】

发布时间: 2012-11-04 10:42:42 作者: rapoo

高效的RandomAccessFile【续】

优化BufferedRandomAccessFile。

?

优化原则:

??? 调用频繁的语句最需要优化,且优化的效果最明显。??? 多重嵌套逻辑判断时,最可能出现的判断,应放在最外层。??? 减少不必要的NEW。


这里举一典型的例子:

?

读写耗用时间(秒)RandomAccessFileRandomAccessFile95.848BufferedInputStream +DataInputStreamBufferedOutputStream +DataOutputStream2.935BufferedRandomAccessFileBufferedOutputStream +DataOutputStream2.813BufferedRandomAccessFileBufferedRandomAccessFile2.453BufferedRandomAccessFile优BufferedRandomAccessFile优2.197

?

可见优化尽管不明显,还是比未优化前快了一些,也许这种效果在老式机上会更明显。

以上比较的是顺序存取,即使是随机存取,在绝大多数情况下也不止一个BYTE,所以缓冲机制依然有效。而一般的顺序存取类要实现随机存取就不怎么容易了。


需要完善的地方

?

提供文件追加功能:

?

读写耗用时间(秒)RandomAccessFileRandomAccessFile95.848BufferedInputStream +DataInputStreamBufferedOutputStream +DataOutputStream2.935BufferedRandomAccessFileBufferedOutputStream +DataOutputStream2.813BufferedRandomAccessFileBufferedRandomAccessFile2.453BufferedRandomAccessFile优BufferedRandomAccessFile优2.197BufferedRandomAccessFile完BufferedRandomAccessFile完0.401


与MappedByteBuffer+RandomAccessFile的对比?

?

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

?

读写耗用时间(秒)RandomAccessFileRandomAccessFile95.848BufferedInputStream +DataInputStreamBufferedOutputStream +DataOutputStream2.935BufferedRandomAccessFileBufferedOutputStream +DataOutputStream2.813BufferedRandomAccessFileBufferedRandomAccessFile2.453BufferedRandomAccessFile优BufferedRandomAccessFile优2.197BufferedRandomAccessFile完BufferedRandomAccessFile完0.401MappedByteBuffer+RandomAccessFileMappedByteBuffer+RandomAccessFile1.209

?

确实不错,看来NIO有了极大的进步。建议采用MappedByteBuffer+RandomAccessFile的方式。

2 楼 415421979 昨天 好 不错 很有所获

读书人网 >Access

热点推荐