Повышенная награда, поскольку единственный ответ не обеспечивает хорошей реализации для 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
.