我正在寻找加快序列化性能的建议,特别是在使用Google Android时。对于我正在进行的项目,我试图将几百个对象从服务器转发到Android应用程序,并且我正在经历各个阶段以获得我需要的性能。
首先,我尝试了一个可怕的XML解析器,我使用Scanner专门为此项目进行了攻击,这在加载对象时造成了令人难以置信的缓慢性能(对于300KB文件约为5分钟)。然后我离开了那个并使我的类实现Serializable并将我拥有的对象的ArrayList写入文件。将该文件读入到Android中,并且已经下载了文件,请注意~100KB序列化文件大约需要15-30秒。我仍然觉得这对于Android应用程序来说完全不可接受,因为我的应用程序需要在启动应用程序时加载数据。
我已经简要阅读了Externalizable及其如何提高性能,但我不确定如何使用嵌套类实现它。现在,我正在尝试存储以下类的ArrayList,其下面是嵌套类。
public class MealMenu implements Serializable{
private String commonsName;
private long startMillis, endMillis, modMillis;
private ArrayList<Venue> venues;
private String mealName;
}
Venue课程:
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;
}
如果可以使用Externalizable来提高性能,那么在尝试写出对象时java是如何调用对象中的方法的?我不确定是否需要在父类中实现它,也不知道如何在每个对象中序列化嵌套对象。
答案 0 :(得分:10)
永远不要在架构之间使用Serializable
。您无法知道Dalvik VM是否与服务器的Java版本具有兼容的序列化。即使它今天有效,也可能不会在任何一端进行升级。始终选择专为跨架构工作而设计的内容。
选项包括:
此外,在应用启动时加载300K数据是一个麻烦的处方。请考虑利用SQLite允许您一次只处理所需的数据位。