簡體   English   中英

如何在Android上有效存儲位集

[英]How to efficiently store bitsets on Android

我的應用程序要求我在Android平台上存儲位集以及一些附帶的元數據(目前僅讀)。 現在顯然可以實現Serializable接口,但是我聽說它在Android上非常慢(我可以想象必須對自定義VM和編譯器執行某些操作,從而使此類反射功能效率低下)。 我是不是該:

  1. 使用Android的Parcel系統,這似乎是一種“輔助”編組技術。
  2. 使用自定義二進制格式(可能是去除標題信息的BMP樣式)。
  3. 手動存儲到XML文件中,使用XML解析器檢索數據。

現在,據我了解,XML序列化或組合化在Android上實際上不是向后兼容的嗎? XML的吸引力當然是可以在常規文本編輯器中編輯這些持久文件。 由於我討厭編寫多余的代碼,這使我處於困境。

在這一點上,我非常傾向於第一種選擇(即位集被打包)。 任何經驗豐富的Java / Android程序員都在乎告訴我,我期望它執行得如何? 我是否必須將位集擴展為布爾數組才能獲得可接受的運行時性能? 當然,這樣做的問題是,甚至必須在Dalvik VM上運行基本的基准測試,因為我不能期望x86上的Sun VM具有與ARM上的Android類似的性能。 Android模擬器如何工作? 它是x86主機之上的VM,還是模仿ARM指令集並運行針對ARM的VM?

我希望這篇ADD帖子不要讓所有人感到困惑,因為它使我感到困惑。 :d

您聽說過串行化速度很慢的謠言,因此您將使用XML? 大聲笑。

您需要編寫一些實際的基准,對您實際需要處理的比特集的類型進行序列化(大型與小型,密集與稀疏等)。 我強烈建議http://code.google.com/p/caliper/編寫基准測試。 http://code.google.com/p/vogar/知道如何在Android設備上運行卡尺基准測試。

正如我在說性能設計 ,仿真器的行為是一樣的器件行為,當涉及到性能。 需要在實際關心的性能最低的設備上進行測試。

我認為第三個選項是最好的,因為在BitSet中,即使在某些情況下它的內存消耗較少,如果以二進制模式存儲,它只會浪費空間,例如:


BitSet b=new BitSet();
b.set(100000);

在這種情況下,您只有一個設置位,但是當您以位圖或序列化格式存儲在文件中時,它只會浪費所有未設置位的空間。Anroid的包裹系統我不知道它是如何工作的,所以我無法對此發表評論。

如果您確定這些位不是大數字,則轉到二進制模式,否則轉到XML模式,或者僅將文本存儲在存儲b.toString()的地方,並在需要時從文件中進行解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM