Android MemoryFile高性能文件类

  次阅读 来源:互联网(转载协议) 2016-01-13 21:59 我要评论(0)

很多网友抱怨Android处理底层I/O性能不是很理想,如果不想使用NDK则可以通过Android MemoryFile类实现高性能的文件读写操作。 MemoryFile顾名思义就是内存文件的意思,如果你过去从事过Win32开发,那么它的原理就是MapViewOfFile(),开发过Linux的网友可能很快就联想到了mmap(),是的该类就是他们的托管代码层封装,位于android.os.MemoryFile这个位置,从Android 1.0开始就被支持。

MemoryFile适用于哪些地方呢?

对于I/O需要频繁操作的,主要是和外部存储相关的I/O操作,MemoryFile通过将NAND或SD卡上的文件,分段映射到内存中进行修改处理,这样就用高速的RAM代替了ROM或SD卡,性能自然提高不少,对于Android手机而言同时还减少了电量消耗。该类实现的功能不是很多,直接从Object上继承,通过JNI的方式直接在C底层执行。

主要的构造方法MemoryFile(String name, int length),这里第二个参数为文件大小,需要说明的是Android的MemoryFile和传统的mmap还有一点点区别,毕竟是手机,它内部的内存管理方式ashmem会从内核中回收资源。

synchronized boolean allowPurging(boolean allowPurging)//允许ashmem清理内存,线程安全同步的方式。

void close() //关闭,因为在Linux内部mmap占用一个句柄,不用时一定要释放了

InputStreamgetInputStream()返回读取的内容用Java层的InputStream保存

OutputStreamgetOutputStream()把一个OutputSream写入到MemoryFile中

booleanisPurgingAllowed() //判断是否允许清理

int length()//返回内存映射文件大小

下面就是我们熟悉的读写细节,主要是对字符数组的操作,这里大家要计算好每个文件类型的占用,同时考虑到效率对于自己分配的大小考虑粒度对齐。

int readBytes(byte[] buffer, int srcOffset, int destOffset, int count)

void writeBytes(byte[] buffer, int srcOffset, int destOffset, int count)

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

    teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

  • 2018深圳国际人工智能展览会 2018 shenzhen International Artif

    2018深圳国际人工智能展览会 2018 shenzhen International Artif

  • Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

    Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

  • Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

    Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...