我需要在会话之间保存用户数据。所以我决定使用二进制序列化并开始在xml中保存数据。经过一些研究,我发现了几个API,即JAXB和xStream。
我查看了xStream的样本,我喜欢它。这很简单。用两个词来说:你给一个对象并接收这个对象的.xml表示。读取xml并重新接收对象。
然后我读到了JAXB - 它非常强大,功能强大。但我发现的所有示例都是关于创建xml架构,基于此架构生成java类等等。目前,我在.xsd中描述我的课程看起来有点费时。我希望它是JAXB用法的许多方面之一。但是我所看到的,有点害怕我。
是否还有其他适合我的任务的API。或者JAXB和xStream的优点和缺点是什么?
答案 0 :(得分:3)
我会从JAXB
开始,因为它内置且易于使用。您不需要以XSD
开头。只需在您的课程中添加一些注释即可。
@XmlRootElement(name="doc")
public class Document {
@XmlElement
protected Foo foo;
// ...
}
序列化:
Document doc = new Document();
JAXBContext jc = JAXBContext.newInstance(Document.class);
Marshaller m = jc.createMarshaller();
m.marshal(doc, System.out);
反序列化:
JAXBContext jc = JAXBContext.newInstance(Document.class);
Unmarshaller u = jc.createUnmarshaller();
Document doc = u.unmarshal(System.in);
将System.out
和System.in
替换为您的实际流,然后您就可以开始了。
在JAXB教程中有一个关于JAXB注释的简短教程:
答案 1 :(得分:0)
当JAXB有点过于强大,而更简单的解决方案可能更好时,我通常会尝试Castor。
好的部分是,您可以使用简单的内省模式,快速简便,如果您觉得需要更多地控制生成的XML,请添加描述符或映射,但两者都是可选的。