假设我想在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 }
然后使用库写出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);
您的输出将如下所示:
Joe 123
1234-456
回去:
Person newJoe = (Person)xstream.fromXML(xml);
XMLEncoder是为Java bean序列化提供的.我最后一次使用它,文件看起来相当讨厌.如果真的不关心文件是什么样的,它可以为你工作,你可以避免第三方依赖,这也很好.我希望使用序列化更漂亮的可能性对XMLEncoder来说也是一个挑战.
如果不为名称添加别名,XStream将输出完整的类名.如果上面的Person类有
package example;xml将具有"example.Person"而不仅仅是"person".