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

📄 xstream.java

📁 xstream是一个把java object序列化成xml文件的开源库,轻便好用
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package com.thoughtworks.xstream;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.basic.*;import com.thoughtworks.xstream.converters.collections.*;import com.thoughtworks.xstream.converters.extended.*;import com.thoughtworks.xstream.converters.reflection.ExternalizableConverter;import com.thoughtworks.xstream.converters.reflection.ReflectionConverter;import com.thoughtworks.xstream.converters.reflection.ReflectionProvider;import com.thoughtworks.xstream.converters.reflection.SerializableConverter;import com.thoughtworks.xstream.core.*;import com.thoughtworks.xstream.core.util.ClassLoaderReference;import com.thoughtworks.xstream.core.util.CompositeClassLoader;import com.thoughtworks.xstream.core.util.CustomObjectInputStream;import com.thoughtworks.xstream.core.util.CustomObjectOutputStream;import com.thoughtworks.xstream.io.HierarchicalStreamDriver;import com.thoughtworks.xstream.io.HierarchicalStreamReader;import com.thoughtworks.xstream.io.HierarchicalStreamWriter;import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;import com.thoughtworks.xstream.io.xml.XppDriver;import com.thoughtworks.xstream.mapper.*;import java.io.*;import java.lang.reflect.Constructor;import java.lang.reflect.Method;import java.math.BigDecimal;import java.math.BigInteger;import java.net.URL;import java.sql.Time;import java.sql.Timestamp;import java.util.*;/** * Simple facade to XStream library, a Java-XML serialization tool. * <p/> * <p><hr><b>Example</b><blockquote><pre> * XStream xstream = new XStream(); * String xml = xstream.toXML(myObject); // serialize to XML * Object myObject2 = xstream.fromXML(xml); // deserialize from XML * </pre></blockquote><hr> * <p/> * <h3>Aliasing classes</h3> * <p/> * <p>To create shorter XML, you can specify aliases for classes using * the <code>alias()</code> method. * For example, you can shorten all occurences of element * <code>&lt;com.blah.MyThing&gt;</code> to * <code>&lt;my-thing&gt;</code> by registering an alias for the class. * <p><hr><blockquote><pre> * xstream.alias("my-thing", MyThing.class); * </pre></blockquote><hr> * <p/> * <h3>Converters</h3> * <p/> * <p>XStream contains a map of {@link com.thoughtworks.xstream.converters.Converter} * instances, each of which acts as a strategy for converting a particular type * of class to XML and back again. Out of the box, XStream contains converters * for most basic types (String, Date, int, boolean, etc) and collections (Map, List, * Set, Properties, etc). For other objects reflection is used to serialize * each field recursively.</p> * <p/> * <p>Extra converters can be registered using the <code>registerConverter()</code> * method. Some non-standard converters are supplied in the * {@link com.thoughtworks.xstream.converters.extended} package and you can create * your own by implementing the {@link com.thoughtworks.xstream.converters.Converter} * interface.</p> * <p/> * <p><hr><b>Example</b><blockquote><pre> * xstream.registerConverter(new SqlTimestampConverter()); * xstream.registerConverter(new DynamicProxyConverter()); * </pre></blockquote><hr> * <p>The default converter, ie the converter which will be used if no other registered * converter is suitable, can be configured by either one of the constructors * or can be changed using the <code>changeDefaultConverter()</code> method. * If not set, XStream uses {@link com.thoughtworks.xstream.converters.reflection.ReflectionConverter} * as the initial default converter. * </p> * <p/> * <p><hr><b>Example</b><blockquote><pre> * xstream.changeDefaultConverter(new ACustomDefaultConverter()); * </pre></blockquote><hr> * <p/> * <h3>Object graphs</h3> * <p/> * <p>XStream has support for object graphs; a deserialized object graph * will keep references intact, including circular references.</p> * <p/> * <p>XStream can signify references in XML using either XPath or IDs. The * mode can be changed using <code>setMode()</code>:</p> * <p/> * <table border="1"> * <tr> * <td><code>xstream.setMode(XStream.XPATH_REFERENCES);</code></td> * <td><i>(Default)</i> Uses XPath references to signify duplicate * references. This produces XML with the least clutter.</td> * </tr> * <tr> * <td><code>xstream.setMode(XStream.ID_REFERENCES);</code></td> * <td>Uses ID references to signify duplicate references. In some * scenarios, such as when using hand-written XML, this is * easier to work with.</td> * </tr> * <tr> * <td><code>xstream.setMode(XStream.NO_REFERENCES);</code></td> * <td>This disables object graph support and treats the object * structure like a tree. Duplicate references are treated * as two seperate objects and circular references cause an * exception. This is slightly faster and uses less memory * than the other two modes.</td> * </tr> * </table> * * <h3>Thread safety</h3> * * <p>The XStream instance is thread-safe. That is, once the XStream instance * has been created and configured, it may be shared across multiple threads * allowing objects to be serialized/deserialized concurrently. * * <h3>Implicit collections</h3> * <p/> * <p>To avoid the need for special tags for collections, you can define implicit collections using one of the * <code>addImplicitCollection</code> methods.</p> * * @author Joe Walnes * @author Mauro Talevi */public class XStream {    private ClassAliasingMapper classAliasingMapper;    private FieldAliasingMapper fieldAliasingMapper;    private DefaultImplementationsMapper defaultImplementationsMapper;    private ImmutableTypesMapper immutableTypesMapper;    private ImplicitCollectionMapper implicitCollectionMapper;    private ReflectionProvider reflectionProvider;    private HierarchicalStreamDriver hierarchicalStreamDriver;    private MarshallingStrategy marshallingStrategy;    private ClassLoaderReference classLoaderReference; // TODO: Should be changeable    private ClassMapper classMapper;    private DefaultConverterLookup converterLookup;    private JVM jvm = new JVM();    public static final int NO_REFERENCES = 1001;    public static final int ID_REFERENCES = 1002;    public static final int XPATH_REFERENCES = 1003;    private static final int PRIORITY_NORMAL = 0;    private static final int PRIORITY_LOW = -10;    private static final int PRIORITY_VERY_LOW = -20;    public XStream() {        this(null, null, new XppDriver());    }    /**     * @deprecated As of XStream 1.1.1, a default Converter is unnecessary as you can register a Converter with an     *             associated priority. Use an alternate constructor.     */    public XStream(Converter defaultConverter) {        this(null, null, new XppDriver(), null);        registerConverter(defaultConverter, PRIORITY_VERY_LOW);    }    public XStream(HierarchicalStreamDriver hierarchicalStreamDriver) {        this(null, null, hierarchicalStreamDriver);    }    public XStream(ReflectionProvider reflectionProvider) {        this(reflectionProvider, null, new XppDriver());    }    public XStream(ReflectionProvider reflectionProvider, HierarchicalStreamDriver hierarchicalStreamDriver) {        this(reflectionProvider, null, hierarchicalStreamDriver);    }    public XStream(ReflectionProvider reflectionProvider, ClassMapper classMapper, HierarchicalStreamDriver driver) {        this(reflectionProvider, classMapper, driver, null);    }    public XStream(ReflectionProvider reflectionProvider, ClassMapper classMapper, HierarchicalStreamDriver driver, String classAttributeIdentifier) {        jvm = new JVM();        if (reflectionProvider == null) {            reflectionProvider = jvm.bestReflectionProvider();        }        this.reflectionProvider = reflectionProvider;        this.hierarchicalStreamDriver = driver;        this.classLoaderReference = new ClassLoaderReference(new CompositeClassLoader());        this.classMapper = classMapper == null ? buildMapper(classAttributeIdentifier) : classMapper;        converterLookup = new DefaultConverterLookup(this.classMapper);        setupAliases();        setupDefaultImplementations();        setupConverters();        setupImmutableTypes();        setMode(XPATH_REFERENCES);    }    /**     * @deprecated As of XStream 1.1.1, a default Converter is unnecessary as you can register a Converter with an     *             associated priority. Use an alternate constructor.     */    public XStream(ReflectionProvider reflectionProvider, ClassMapper classMapper, HierarchicalStreamDriver driver, String classAttributeIdentifier, Converter defaultConverter) {        this(reflectionProvider, classMapper, driver, classAttributeIdentifier);        registerConverter(defaultConverter, PRIORITY_VERY_LOW);    }    private ClassMapper buildMapper(String classAttributeIdentifier) {        MapperWrapper mapper = new DefaultMapper(classLoaderReference, classAttributeIdentifier);        mapper = new XmlFriendlyMapper(mapper);        mapper = new ClassAliasingMapper(mapper);        classAliasingMapper = (ClassAliasingMapper) mapper; // need a reference to that one        mapper = new FieldAliasingMapper(mapper);        fieldAliasingMapper = (FieldAliasingMapper) mapper; // need a reference to that one        mapper = new ImplicitCollectionMapper(mapper);        implicitCollectionMapper = (ImplicitCollectionMapper)mapper; // need a reference to this one        mapper = new DynamicProxyMapper(mapper);        if (JVM.is15()) {            mapper = new EnumMapper(mapper);        }        mapper = new OuterClassMapper(mapper);        mapper = new ArrayMapper(mapper);        mapper = new DefaultImplementationsMapper(mapper);        defaultImplementationsMapper = (DefaultImplementationsMapper) mapper; // and that one        mapper = new ImmutableTypesMapper(mapper);        immutableTypesMapper = (ImmutableTypesMapper)mapper; // that one too        mapper = wrapMapper(mapper);        mapper = new CachingMapper(mapper);        return mapper;    }    protected MapperWrapper wrapMapper(MapperWrapper next) {        return next;    }    protected void setupAliases() {        alias("null", ClassMapper.Null.class);        alias("int", Integer.class);        alias("float", Float.class);        alias("double", Double.class);        alias("long", Long.class);        alias("short", Short.class);        alias("char", Character.class);        alias("byte", Byte.class);        alias("boolean", Boolean.class);        alias("number", Number.class);        alias("object", Object.class);        alias("big-int", BigInteger.class);        alias("big-decimal", BigDecimal.class);        alias("string-buffer", StringBuffer.class);        alias("string", String.class);        alias("java-class", Class.class);        alias("method", Method.class);        alias("constructor", Constructor.class);        alias("date", Date.class);        alias("url", URL.class);        alias("bit-set", BitSet.class);        alias("map", Map.class);        alias("entry", Map.Entry.class);        alias("properties", Properties.class);        alias("list", List.class);        alias("set", Set.class);        alias("linked-list", LinkedList.class);        alias("vector", Vector.class);        alias("tree-map", TreeMap.class);        alias("tree-set", TreeSet.class);        alias("hashtable", Hashtable.class);        // Instantiating these two classes starts the AWT system, which is undesirable. Calling loadClass ensures        // a reference to the class is found but they are not instantiated.        alias("awt-color", jvm.loadClass("java.awt.Color"));        alias("awt-font", jvm.loadClass("java.awt.Font"));        alias("sql-timestamp", Timestamp.class);        alias("sql-time", Time.class);        alias("sql-date", java.sql.Date.class);        alias("file", File.class);        alias("locale", Locale.class);        alias("gregorian-calendar", Calendar.class);                if (JVM.is14()) {            alias("linked-hash-map", jvm.loadClass("java.util.LinkedHashMap"));

⌨️ 快捷键说明

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