Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 初級開發 >> Android高性能文件類MemoryFile

Android高性能文件類MemoryFile

編輯:初級開發

很多網友抱怨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開發網將在下次和大家講到。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved