eri*_*son 5 java xml serialization xstream
假设我想在XML中存储许多小配置对象,我不太关心格式.内置到JDK中的XMLDecoder类可以工作,从我听到的,XStream以类似的方式工作.
每个图书馆有哪些优势?
我非常喜欢XStream 库.由于提供了Java对象,它在输出相当简单的xml方面做得非常好.它也非常适合从xml中重现对象.而且,无论如何,我们的第三方图书馆之一已经依赖它.
我们选择使用它是因为我们希望我们的xml是人类可读的.使用别名功能可以使它更好.
如果希望某个对象的某些部分以更好的方式反序列化,则可以扩展库.我们在一个案例中做到了这一点,因此文件将具有经度和纬度的一组度,分和秒,而不是两个双精度.
两分钟的教程总结了基本用法,但为了将信息保存在一个地方,我会试着在这里总结一下,只是稍微缩短一点.
// define your classes
public class Person {
private String firstname;
private PhoneNumber phone;
// ... constructors and methods
}
public class PhoneNumber {
private int code;
private String number;
// ... constructors and methods
}
Run Code Online (Sandbox Code Playgroud)
然后使用库写出xml.
// initial the libray
XStream xstream = new XStream();
xstream.alias("person", Person.class); // elementName, Class
xstream.alias("phone", PhoneNumber.class);
// make your objects
Person joe = new Person("Joe");
joe.setPhone(new PhoneNumber(123, "1234-456"));
// convert xml
String xml = xstream.toXML(joe);
Run Code Online (Sandbox Code Playgroud)
您的输出将如下所示:
<person>
<firstname>Joe</firstname>
<phone>
<code>123</code>
<number>1234-456</number>
</phone>
</person>
回去:
Person newJoe = (Person)xstream.fromXML(xml);
XMLEncoder是为Java bean序列化提供的.我最后一次使用它,文件看起来相当讨厌.如果真的不关心文件是什么样的,它可以为你工作,你可以避免第三方依赖,这也很好.我希望使用序列化更漂亮的可能性对XMLEncoder来说也是一个挑战.
如果不为名称添加别名,XStream将输出完整的类名.如果上面的Person类有
package example;
Run Code Online (Sandbox Code Playgroud) xml将具有"example.Person"而不仅仅是"person".