⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treemarshaller.java

📁 xstream是一个把java object序列化成xml文件的开源库,轻便好用
💻 JAVA
字号:
package com.thoughtworks.xstream.core;import com.thoughtworks.xstream.alias.ClassMapper;import com.thoughtworks.xstream.converters.Converter;import com.thoughtworks.xstream.converters.ConverterLookup;import com.thoughtworks.xstream.converters.DataHolder;import com.thoughtworks.xstream.converters.MarshallingContext;import com.thoughtworks.xstream.core.util.ObjectIdDictionary;import com.thoughtworks.xstream.io.HierarchicalStreamWriter;import java.util.Iterator;public class TreeMarshaller implements MarshallingContext {    protected HierarchicalStreamWriter writer;    protected ConverterLookup converterLookup;    protected ClassMapper classMapper;    private ObjectIdDictionary parentObjects = new ObjectIdDictionary();    private DataHolder dataHolder;    public TreeMarshaller(HierarchicalStreamWriter writer,                          ConverterLookup converterLookup,                          ClassMapper classMapper) {        this.writer = writer;        this.converterLookup = converterLookup;        this.classMapper = classMapper;    }    public void convertAnother(Object item) {        if (parentObjects.containsId(item)) {            throw new CircularReferenceException();        }        parentObjects.associateId(item, "");        Converter converter = converterLookup.lookupConverterForType(item.getClass());        converter.marshal(item, writer, this);        parentObjects.removeId(item);    }    public void start(Object item, DataHolder dataHolder) {        this.dataHolder = dataHolder;        if (item == null) {            writer.startNode(classMapper.serializedClass(ClassMapper.Null.class));            writer.endNode();        } else {            writer.startNode(classMapper.serializedClass(item.getClass()));            convertAnother(item);            writer.endNode();        }    }    public Object get(Object key) {        lazilyCreateDataHolder();        return dataHolder.get(key);    }    public void put(Object key, Object value) {        lazilyCreateDataHolder();        dataHolder.put(key, value);    }    public Iterator keys() {        lazilyCreateDataHolder();        return dataHolder.keys();    }    private void lazilyCreateDataHolder() {        if (dataHolder == null) {            dataHolder = new MapBackedDataHolder();        }    }    public static class CircularReferenceException extends RuntimeException {    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -