繁体   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