我正在寻找加快序列化性能的建议,特别是在使用 Google Android 时。对于我正在从事的一个项目,我试图将数百个对象从服务器中继到 Android 应用程序,并经历各个阶段以获得我需要的性能。
首先,我尝试了一个糟糕的 XML 解析器,我使用 Scanner 专门针对这个项目将其组合在一起,这导致加载对象时的性能极其缓慢(300KB 文件大约需要 5 分钟)。然后,我摆脱了这一点,让我的类实现了 Serialized,并将我拥有的对象的 ArrayList 写入了一个文件。将该文件读取到 Android 对象中(请注意,文件已下载)对于约 100KB 的序列化文件需要约 15-30 秒。我仍然发现这对于 Android 应用程序来说是完全不可接受的,因为我的应用程序需要在启动应用程序时加载数据。
我已经简要阅读了有关Externalized 以及它如何提高性能的信息,但我不确定如何使用嵌套类来实现它。现在,我正在尝试存储以下类的 ArrayList,以及其下面的嵌套类。
public class MealMenu implements Serializable{
private String commonsName;
private long startMillis, endMillis, modMillis;
private ArrayList<Venue> venues;
private String mealName;
}
和场地类:
public class Venue implements Serializable{
private String name;
private ArrayList<FoodItem> foodItems;
}
还有 FoodItem 类:
public class FoodItem implements Serializable{
private String name;
private boolean vegan;
private boolean vegetarian;
}
如果Externalized是提高性能的方法,那么当您尝试将其写出时,是否有关于java如何调用对象中的方法的信息?我不确定是否需要在父类中实现它,也不知道如何序列化每个对象中的嵌套对象。
切勿使用Serializable
跨架构。您无法知道 Dalvik VM 是否具有与您服务器的 Java 版本兼容的序列化。即使它今天可以工作,也可能无法在两端升级。始终选择专门为跨架构工作而设计的东西。
选项包括:
- 协议缓冲区
- Apache Thrift(有效负载打包,不一定是 RPC 东西)
- XML(您忽略了提及您使用的解析器——如果您使用 DOM,请尝试 SAX)
- JSON(据报道 Jackson JSON 解析器比 Android 内置的 org.json 解析器更快)
此外,在应用程序启动时加载 300K 的数据也会带来麻烦。请考虑利用 SQLite 让您一次只处理所需的数据位。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)