Android高性能文件类MemoryFile
来源:互联网 发布:游戏编程入门自学 编辑:程序博客网 时间:2024/05/21 15:01
很多网友抱怨Android处理底层I/O性能不是很理想,如果不想使用NDK则可以通过MemoryFile类实现高性能的文件读写操作。MemoryFile顾名思义就是内存文件的意思,如果你过去从事过Win32开发,那么它的原理就是MapViewOfFile(),当然开发过Linux的网友可能很快就联想到了mmap(),是的该类就是他们的托管代码层封装,位于android.os.MemoryFile这个位置,从Android 1.0开始就被支持。
MemoryFile适用于哪些地方呢?
对于I/O需要频繁操作的,主要是和外部存储相关的I/O操作,MemoryFile通过将 NAND或SD卡上的文件,分段映射到内存中进行修改处理,这样就用高速的RAM代替了ROM或SD卡,性能自然提高不少,对于Android手机而言同时还减少了电量消耗。Android123提示网友该类实现的功能不是很多,直接从Object上继承,通过JNI的方式直接在C底层执行。
主要的构造方法 MemoryFile(String name, int length) ,这里第二个参数为文件大小,需要说明的是Android的MemoryFile和传统的mmap还有一点点区别,毕竟是手机,它内部的内存管理方式ashmem会从内核中回收资源。毕竟目前部分低端机型的RAM也比较吃紧。
synchronized boolean allowPurging(boolean allowPurging) //允许ashmem清理内存,线程安全同步的方式。
void close() //关闭,因为在Linux内部mmap占用一个句柄,不用时一定要释放了
InputStream getInputStream() 返回读取的内容用Java层的InputStream保存
OutputStream getOutputStream() 把一个OutputSream写入到MemoryFile中
boolean isPurgingAllowed() //判断是否允许清理
int length() //返回内存映射文件大小
下面就是我们熟悉的,读写细节,主要是对字符数组的操作,这里大家要计算好每个文件类型的占用,同时考虑到效率对于自己分配的大小考虑粒度对齐。
int readBytes(byte[] buffer, int srcOffset, int destOffset, int count)
void writeBytes(byte[] buffer, int srcOffset, int destOffset, int count)
- Android高性能文件类MemoryFile
- Android高性能文件类MemoryFile
- Android高性能文件类MemoryFile
- Android高性能文件类MemoryFile (2011-01-15 14:50:57)
- android -- MemoryFile 内存文件(IO性能优化)
- android -- MemoryFile 内存文件(IO性能优化)
- 【Android 文件】MemoryFile 内存文件
- Android-MemoryFile介绍
- Android MemoryFile 源码分析以及使用
- Android匿名共享内存和MemoryFile
- Android匿名共享内存和MemoryFile
- Android匿名共享内存和MemoryFile
- Android高性能编程
- android 高性能编程
- Android高性能编程
- Android高性能高斯模糊方案
- Android高性能高斯模糊方案
- Android高性能编程注意事项
- 二叉树的遍历 非递归 C实现——中序遍历篇
- 小型数据库sqlite3的一些实用操作
- 【java】序列化
- 【原创】linux如何给自己写的脚本程序加个环境变量
- ubuntu/wireshark: There are no interfaces on which a capture can be done.故障解决
- Android高性能文件类MemoryFile
- java 读取另外一台局域网机器上的文件
- Android源码编译(一)----------->TI-Android-GingerBread-2.3-DevKit-1.0 系统定制(just for beagleboard xm Rev B)
- 青年人初入职场
- java基础问题----java中有几种方法可以实现一个线
- android 什么是appwidget
- 保存数据的一系列方法
- C关键字volatile
- Visual Studio 2010 和 Boost库编译、开发