志在指尖
用双手敲打未来

Android 高性能文件类 MemoryFile

很多网友埋怨Android处置底层I/O性能不是很理想,假如不想运用NDK则能够经过MemoryFile类完成高性能的文件读写操作。MemoryFile望文生义就是内存文件的意义,假如你过去从事过Win32开发,那么它的原理就是MapViewOfFile(),当然开发过Linux的网友可能很快就联想到了mmap(),是的该类就是他们的托管代码层封装,位于android.os.MemoryFile这个位置,从Android1.0开端就被支持。MemoryFile适用于哪些中央呢?关于I/O需求频繁操作的,主要是和外部存储相关的I/O操作,MemoryFile经过将NAND或SD卡上的文件,分段映射到内存中停止修正处置,这样就用高速的RAM替代了ROM或SD卡,性能自然进步不少,关于Android手机而言同时还减少了电量耗费。Android123提示网友该类完成的功用不是很多,直接从Object上继承,经过JNI的方式直接在C底层执行。主要的结构办法MemoryFile(Stringname,intlength),这里第二个参数为文件大小,需求阐明的是Android的MemoryFile和传统的mmap还有一点点区别,毕竟是手机,它内部的内存管理方式ashmem会从内核中回收资源。毕竟目前局部低端机型的RAM也比拟吃紧。synchronizedbooleanallowPurging(booleanallowPurging)//允许ashmem清算内存,线程平安同步的方式。Android
voidclose()//关闭,由于在Linux内部mmap占用一个句柄,不用时一定要释放了
InputStreamgetInputStream()返回读取的内容用Java层的InputStream保管
OutputStreamgetOutputStream()把一个OutputSream写入到MemoryFile中
booleanisPurgingAllowed()//判别能否允许清算
intlength()//返回内存映射文件大小下面就是我们熟习的,读写细节,主要是对字符数组的操作,这里大家要计算好每个文件类型的占用,同时思索到效率关于本人分配的大小思索粒度对齐。
intreadBytes(byte[]buffer,intsrcOffset,intdestOffset,intcount)
voidwriteBytes(byte[]buffer,intsrcOffset,intdestOffset,intcount)详细的实践应用。

未经允许不得转载:IT技术网站 » Android 高性能文件类 MemoryFile
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载