高效的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 昨天 好 不错 很有所获