序列化性能和谷歌Android

时间:2010-05-27 00:53:13

标签: java android performance serialization

我正在寻找加快序列化性能的建议,特别是在使用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是如何调用对象中的方法的?我不确定是否需要在父类中实现它,也不知道如何在每个对象中序列化嵌套对象。

1 个答案:

答案 0 :(得分:10)

永远不要在架构之间使用Serializable。您无法知道Dalvik VM是否与服务器的Java版本具有兼容的序列化。即使它今天有效,也可能不会在任何一端进行升级。始终选择专为跨架构工作而设计的内容。

选项包括:

  • 协议缓冲区
  • Apache Thrift(有效负载包装,不一定是RPC的东西)
  • XML(您忽略了提到您使用的解析器 - 如果您使用了DOM,请尝试SAX)
  • JSON(据说Jackson JSON解析器比Android内置的org.json解析器更快)

此外,在应用启动时加载300K数据是一个麻烦的处方。请考虑利用SQLite允许您一次只处理所需的数据位。

相关问题