xjl:XStream的对象图与转换器

对象图
XStream支持对象图,也就是“反序列化”一个对象的时候将会保持原来的对象引用关系,这其中包括循环引用关系。 我们可以指定XStream是使用XPath还是IDs来实现对象引用的这种处理方式,指定的方式就是调用XStream的setMode方法,此方法有XStream.XPATH_REFERENCES、XStream.ID_REFERENCES、XStream.NO_REFERENCES三个选项。其意义分别如下:
XStream.XPATH_REFERENCES:这是默认值。这个选项指定XStream使用XPath引用方式处理重复引用。
XStream.ID_REFERENCES:这个选项指定XStream使用ID引用方式处理重复引用。当使用手写XML的时候,这种方式可能更好用一些。 
XStream.NO_REFERENCES:这个选项指定XStream不支持图引用,将对象结构当做树状处理。重复的引用将会被认为是两个独立的对象,而循环引用将会导致一个异常。这种方式速度会更快一些,并且相对于前两者来说占用更少的内存。
自定义转换器
XStream对String, Date, int, boolean等基本类型以及Map, List, Set, Properties等集合类型提供了转换器,因此这些类型可以轻松的实现序列化和反序列化。如果您使用的数据类型不被XStream支持,那么就需要自定义数据转换器。自定义转换器要实现com.thoughtworks.xstream.converters.Converter接口,这个接口定义了如下三个方法:
boolean canConvert(Class type);
void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context);
Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context);
这三个方法分别表示:type这个类型的数据此转换器是否有能力转换;将对象进行编组(marshal)为XML格式;将XML格式反编组(unmarshal)为对象。
我们通常无需直接实现该接口,而是继承com.thoughtworks.xstream.converters.MarshallingContext.AbstractBasicConverter抽象类,然后覆盖:
protected String toString(Object obj)
protected Object fromString(String str);
两个方法即可。可以参考com.thoughtworks.xstream.converters.extended.SqlTimestampConverter的实现代码。
转换器开发完毕以后调用XStream类的public void registerConverter(Converter converter)方法注册转换器。

本文出自 “CowNew开源团队” 博客,转载请与作者联系!

你可能感兴趣的:(xstream,转换器,休闲,对象图,xjl)