官网地址:
Maven
com.thoughtworks.xstream xstream 1.4.10
初始化XStream
XStream xstream = new XStream();
指定别名
// 类xstream.alias("student", Student.class);// 字段xstream.aliasField("name", Student.class, "studentName");// 隐式集合xstream.addImplicitCollection(Student.class, "notes");// 属性xstream.useAttributeFor(Student.class, "studentName");xstream.aliasField("name", Student.class, "studentName");// 包xstream.aliasPackage("my.company.xstream", "com.yiibai.xstream");
注解
使用注解前,需要先设置XStream
xstream.processAnnotations(Note.class); 或xstream.autodetectAnnotations(true);
// 类、字段@XStreamAlias("student")// 隐式集合@XStreamImplicit// 属性@XStreamAlias("name")@XStreamAsAttribute
对象流
ObjectOutputStream objectOutputStream = xstream.createObjectOutputStream(new FileOutputStream("test.txt"));objectOutputStream.writeObject(student1);objectOutputStream.writeObject(student2);objectOutputStream.writeObject(student3);objectOutputStream.writeObject(student4);objectOutputStream.writeObject("Hello World");objectOutputStream.close();ObjectInputStream objectInputStream = xstream.createObjectInputStream(new FileInputStream("test.txt"));Student student5 = (Student) objectInputStream.readObject();Student student6 = (Student) objectInputStream.readObject();Student student7 = (Student) objectInputStream.readObject();Student student8 = (Student) objectInputStream.readObject();String text = (String) objectInputStream.readObject();System.out.println(student5);System.out.println(student6);System.out.println(student7);System.out.println(student8);System.out.println(text);
自定义转换器
使用前需要设置XStream:
xstream.registerConverter(new StudentConverter());
示例:
class StudentConverter implements Converter { public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { Student student = (Student) value; writer.startNode("name"); writer.setValue(student.getName().getFirstName() + "," + student.getName().getLastName()); writer.endNode(); } public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { reader.moveDown(); String[] nameparts = reader.getValue().split(","); Student student = new Student(nameparts[0], nameparts[1]); reader.moveUp(); return student; } public boolean canConvert(Class object) { return object.equals(Student.class); }}
canConvert - 检查支持的对象类型的序列化。
marshal - 序列化对象到XML。 unmarshal - 从XML对象反序列化
解决控制台报错Security framework of XStream not initialized, XStream is probably vulnerable.
XStream.setupDefaultSecurity(xstream);
解决com.thoughtworks.xstream.security.ForbiddenClassException
异常
Class [] classes = new Class[] { Student.class, Note.class };xstream.allowTypes(classes);