我的应用程序要求我在 Android 平台上存储位组以及一些附带的元数据(目前只读)。现在显然我可以实现 Serialized 接口(interface),但我听说它在 Android 上非常慢(我可以想象必须对自定义 VM 和编译器做一些事情,从而使此类反射功能效率低下)。 我应该:
- 使用 Android 的 Parcel 系统,这似乎是一种“辅助”编码技术。
- 使用自定义二进制格式(可能是删除了 header 信息的 BMP 样式)。
- 手动存储到 XML 文件中,使用 XML 解析器检索数据。
据我所知,XML 序列化或打包在 Android 上并不是真正向后兼容? XML 的吸引力当然在于这些持久文件可以在常规文本编辑器中进行编辑。这让我陷入了困境,因为我讨厌编写冗余的代码。
在这一点上,我非常倾向于第一个选项(即位集被分割)。有经验丰富的 Java/Android 程序员愿意告诉我,我可以期望它的执行效果如何吗?我是否必须将位集扩展为 boolean 数组才能获得可接受的运行时性能?当然,这样做的问题是,即使是基本的基准测试也必须在 Dalvik VM 上运行,因为我不能指望 Sun 在 x86 上的 VM 具有与 ARM 上的 Android 类似的性能。 Android模拟器是如何工作的?它是 x86 主机之上的虚拟机,还是模拟 ARM 指令集并运行针对 ARM 的虚拟机?
我希望这篇ADD帖子没有让大家感到困惑,因为它让我感到困惑。 :D
最佳答案
您听说序列化速度很慢,所以您打算使用 XML?哈哈。
您需要为自己编写一些现实的基准,序列化您实际需要处理的位集类型(大与小,密集与稀疏,等等)。我强烈推荐http://code.google.com/p/caliper/用于编写您的基准。 http://code.google.com/p/vogar/知道如何在 Android 设备上运行 caliper 基准测试。
正如我在Designing for Performance中所说的那样就性能而言,模拟器行为与设备行为完全不同。您需要在您真正关心的性能最低的设备上进行测试。
关于java - 如何在 Android 上高效存储位集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3376560/