<button id="u2w23"></button>

<tbody id="u2w23"><track id="u2w23"></track></tbody><dd id="u2w23"><track id="u2w23"></track></dd><button id="u2w23"><acronym id="u2w23"></acronym></button> <tbody id="u2w23"><noscript id="u2w23"></noscript></tbody>

  • <button id="u2w23"></button><li id="u2w23"><acronym id="u2w23"><cite id="u2w23"></cite></acronym></li>

  • Android高性能文件類

    [來源] 達內    [編輯] 達內   [時間]2012-12-06

    下面就是我們熟悉的,讀寫細節,主要是對字符數組的操作,這里大家要計算好每個文件類型的占用,同時考慮到效率對于自己分配的大小考慮粒度對齊

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

    資源下載

    ?