目录
http://x-stream.github.io/index.html
http://x-stream.github.io/download.html
官网:
XStream is a simple library to serialize objects to XML and back again.
XStream 是一个序列化Java对象为XML和XML 反序列化为 Java 对象的简单库。
XStream 架构由 6个主要组件组成:
下载地址:https://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream/1.4.18/xstream-1.4.18.jar
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.18</version>
</dependency>
package org.black.demo.xstream;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider;
import com.thoughtworks.xstream.converters.reflection.ReflectionProvider;
import com.thoughtworks.xstream.core.ClassLoaderReference;
import com.thoughtworks.xstream.io.HierarchicalStreamDriver;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.security.AnyTypePermission;
/**
* 提供序列化和反序列化能力
*
*/
public class XStreamDemo {
/**
* 对象序列化为XML
*/
public String serialize(Object obj) {
// 实例化 XStream 对象,需要 3个参数:
// ReflectionProvider
// HierarchicalStreamDriver
// ClassLoaderReference
// 反射提供者
ReflectionProvider reflectionProvider = new PureJavaReflectionProvider();
// 流解析器和编写器的实现(这里使用 dom )
HierarchicalStreamDriver driver = new DomDriver();
// 类加载器引用
ClassLoaderReference classLoaderReference = new ClassLoaderReference(obj.getClass().getClassLoader());
XStream xstream = new XStream(reflectionProvider, driver, classLoaderReference);
xstream.alias(obj.getClass().getName(), obj.getClass());
// 序列化为xml
return xstream.toXML(obj);
}
/**
* XML反序列化为对象
*/
public <T> T deserialize(String xml, T root) {
// 反射提供者
ReflectionProvider reflectionProvider = new PureJavaReflectionProvider();
// 流解析器和编写器的实现
HierarchicalStreamDriver driver = new DomDriver();
// 类加载器引用
ClassLoaderReference classLoaderReference = new ClassLoaderReference(root.getClass().getClassLoader());
XStream xstream = new XStream(reflectionProvider, driver, classLoaderReference);
xstream.alias(root.getClass().getName(), root.getClass());
// 开启任何访问权限
xstream.addPermission(AnyTypePermission.ANY);
// 反序列化为对象
return (T) xstream.fromXML(xml, root);
}
}
package org.black.demo.xstream;
import java.io.Serializable;
import java.util.Arrays;
/**
* 用户
*/
public class User implements Serializable
{
// serialVersionUID IDE自动生成的序列化ID
private static final long serialVersionUID = -3552351542858137630L;
// 姓名
private String name;
// 性别
private String sex;
// 年龄
private Integer age;
// 身高
private Double height;
// 分数
private Double[] points;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getHeight() {
return height;
}
public void setHeight(Double height) {
this.height = height;
}
public Double[] getPoints() {
return points;
}
public void setPoints(Double[] points) {
this.points = points;
}
@Override
public String toString() {
return "User [name=" + name + ", sex=" + sex + ", age=" + age + ", height=" + height + ", points=" + Arrays.toString(points) +"]";
}
}
package org.black.demo.xstream;
/**
* 测试
*
* @author black
* @date 2021-12-10 14:31:024
*/
public class XStreamDemoTest {
public static void main(String[] args) {
User admin = new User();
admin.setName("管理员");
admin.setAge(27);
admin.setHeight(180.00);
admin.setSex("男");
Double[] points = new Double[0];
admin.setPoints(points);
System.out.println("admin 序列化前:" + admin);
XStreamDemo demo = new XStreamDemo();
String adminXMLInfo = demo.serialize(admin);
System.out.println("admin 序列化为 xml 后:" + adminXMLInfo);
User adminReplicate = new User();
demo.deserialize(adminXMLInfo, adminReplicate);
System.out.println("xml 反序列化后:" + adminReplicate);
}
}
admin 序列化前:User [name=管理员, sex=男, age=27, height=180.0, points=[]]
admin 序列化为 xml 后:<org.black.demo.xstream.User>
<name>管理员</name>
<sex>男</sex>
<age>27</age>
<height>180.0</height>
<points/>
</org.black.demo.xstream.User>
xml 反序列化后:User [name=管理员, sex=男, age=27, height=180.0, points=[]]
手机扫一扫
移动阅读更方便
你可能感兴趣的文章