博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XStream
阅读量:4686 次
发布时间:2019-06-09

本文共 2844 字,大约阅读时间需要 9 分钟。

官网地址:

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);

参考资料

转载于:https://www.cnblogs.com/huangwenjie/p/9239307.html

你可能感兴趣的文章
[原创]Windows利用BitNami搭建Redmine
查看>>
Mybatis逆向工程配置文件详细介绍(转)
查看>>
Linux命令学习一日一命令(RM)
查看>>
5-1
查看>>
一名3年工作经验的程序员应该具备的技能 -- 转载
查看>>
重回博客园有感
查看>>
【转】java事件监听机制
查看>>
Leetcode 423.从英文中重建数字
查看>>
数组 Arrays类
查看>>
String类的深入学习与理解
查看>>
OLTP vs OLAP
查看>>
一些题目(3)
查看>>
Eclipse下配置主题颜色
查看>>
杂题 UVAoj 107 The Cat in the Hat
查看>>
ftp sun jdk自带
查看>>
python 元类——metaclass
查看>>
什么是缓冲,引入缓冲的原因是什么?
查看>>
叙述下列术语的定义并说明它们之间的关系:卷、块、文件、记录。
查看>>
不把DB放进容器的理由
查看>>
OnePage收集
查看>>