2010-07-31 29 views
0

我的應用程序需要我在Android平臺上存儲位集以及一些伴隨元數據(現在只能讀取)。現在顯然我可以實現Serializable接口,但是我聽說它在Android上非常慢(我可以想象必須對定製虛擬機和編譯器做些什麼來使這種反射功能效率低下)。 我應該:如何在Android上高效地存儲位集

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

現在從我的理解XML序列化或parcelization是不是真的向後兼容Android? XML的吸引力當然是可以在普通的文本編輯器中編輯這些永久文件。這讓我處於困境,因爲我討厭編寫冗餘的代碼。

在這一點上,我非常傾向於第一個選項(即bitset被劃分)。任何有經驗的Java/Android程序員都會告訴我我可以期待它的執行情況如何?我是否必須將bitset擴展爲一組布爾值以獲得可接受的運行時性能?當然,問題在於,即使是基本的基準測試也必須在Dalvik虛擬機上運行,​​因爲我不能指望x86上的Sun虛擬機具有與ARM上的Android類似的性能。 Android模擬器如何工作?它是x86主機之上的虛擬機還是模擬ARM指令集並運行鍼對ARM的虛擬機?

我希望這個ADD帖子不會讓所有人都感到困惑,因爲它讓我困惑。 :d

回答

2

你聽說過序列化速度慢,所以你要使用XML嗎?大聲笑。你需要編寫一些實際的基準測試,序列化你實際需要處理的比特集(大與小,密集與稀疏,等等)。我強烈建議http://code.google.com/p/caliper/寫你的基準。 http://code.google.com/p/vogar/知道如何在Android設備上運行卡尺基準測試。

正如我所說的Designing for Performance,仿真器的行爲是沒有什麼像設備的行爲,當涉及到性能。你需要需要來測試你真正關心的性能最差的設備。

0

我覺得第三個選擇是最好的,因爲在BitSet中,即使它較少的內存在某些情況下,消費它可以簡單地浪費空間,如果你以二進制模式存儲,一個例子是:


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

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

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