【发布时间】:2013-04-02 00:29:54
【问题描述】:
提出赏金,因为唯一的答案没有为 Android 提供良好的实现。是否有更快的实现与 Android 兼容?还是 SimpleXML 是我能获得的最佳性能?
我对 Java 和 Android 开发相当陌生,所以不知道将 xml 字符串反序列化为对象的正确过程。我找到了一种适用于的方法:
public static Object deserializeXMLToObject(String xmlFile,Object objClass) throws Exception
{
try
{
InputStream stream = new ByteArrayInputStream(xmlFile.getBytes("UTF-8"));
Serializer serializer = new Persister();
objClass = serializer.read(objClass, stream);
return objClass;
}
catch (Exception e)
{
return e;
}
}
xmlFile 是(错误命名的)xml 字符串,objClass 是我要反序列化到的类的空类。这通常是其他对象的列表。
示例类:
@Root(name="DepartmentList")
public class DepartmentList {
@ElementList(entry="Department", inline=true)
public List<Department> DepartmentList =new ArrayList<Department>();
public boolean FinishedPopulating = false;
}
部门类:
public class Department {
@Element(name="DeptID")
private String _DeptID ="";
public String DeptID()
{
return _DeptID;
}
public void DeptID(String Value)
{
_DeptID = Value;
}
@Element(name="DeptDescription")
private String _DeptDescription ="";
public String DeptDescription()
{
return _DeptDescription;
}
public void DeptDescription(String Value)
{
_DeptDescription = Value;
}
}
示例 XML:
<DepartmentList>
<Department>
<DeptID>525</DeptID>
<DeptDescription>Dept 1</DeptDescription>
</Department>
<Department>
<DeptID>382</DeptID>
<DeptDescription>Dept 2</DeptDescription>
</Department>
</DepartmentList>
这在整个应用程序中运行良好,但我已经到了需要反序列化列表中 >300 个对象的地步。这只需要大约 5 秒,或者在调试时接近一分钟,但用户对这种性能并不满意,并且在不需要调试时浪费了时间。有什么办法可以加快这个速度吗?还是我应该这样做的另一种方式?最好只通过更改deserializeXMLToObject 方法。
【问题讨论】:
-
就这么简单——一种类型有一个列表和两个字段,还是现实中复杂得多?
-
这是一种类型,但大约 300-400 行中可能有大约 30 个字段。我只是出于示例目的对其进行了简化。
-
一种可能的解决方案是报告结果,而无需等待解析器解析整个内容
-
XML 很慢。考虑使用其他格式。
标签: java android performance deserialization simple-framework