XStream使用记录

官网

http://x-stream.github.io/index.html

下载地址

http://x-stream.github.io/download.html

参考资料

什么是 XStream?

官网:

XStream is a simple library to serialize objects to XML and back again.

XStream 是一个序列化Java对象为XML和XML 反序列化为 Java 对象的简单库。

XStream 架构由 6个主要组件组成:

  • Converters
  • Mappers
  • Drivers (Writer and Reader)
  • Context
  • Type Permissions
  • Facade

使用例子

1. 下载 xstream-1.4.18.jar 或 引入依赖

下载地址: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>

2. 编写 XStreamDemo 类

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

3. 编写 User 类

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) +"]";
}
}

4. 编写测试类

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

5. 测试结果

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=[]]

XStream使用记录的更多相关文章

  1. 打造完美的xml技术解决方案(dom4j/xstream)

    转: XML 技术是随着 Java 的发展而发展起来的.在 XML 出现之前对于简单的数据格式通常是存储在 ini 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专 ...

  2. 使用XStream注解实现Java对象与XML互相转换的代码示例

    本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例.    我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件.如:jdom.dom4j等 ...

  3. xml 解析 Xstream

    1.概述 json 解析可以使用gson包解为现成的对象,那么xml可以不可以用现成的包解析成java的对象呢? 带着这个问题,查询了一些材料找到了Xstream解析方法,确实可以完成这种思考,只是实 ...

  4. 使用XStream是实现XML与Java对象的转换(6)--持久化

    九.持久化 在第八节的示例中,当我们操作一组对象时,我们可以指定Writer.OutputStream来写出序列化后的XML数据,我们还可以指定Reader.InputStream来读取序列化后的XM ...

  5. Tomcat通过Memcached实现session共享的完整部署记录

    对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...

  6. jmeter 4.0版本更新说明(个人做个记录)总版本更新合集

    版本4.0 摘要 新的和值得注意的 不兼容的变化 Bug修复 改进 非功能性变化 已知问题和解决方法 谢谢 新的和值得注意的 核心改进 JMeter现在支持JAVA 9. 提供新的边界提取器元件,提供 ...

  7. XStream 1.4.10版本处理xml使用问题

    XStream pom依赖: <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifa ...

  8. 记一次debug记录:Uncaught SyntaxError: Unexpected token ILLEGAL

    在使用FIS3搭建项目的时候,遇到了一些问题,这里记录下. 这里是发布搭建代码: // 代码发布时 fis.media('qa') .match('*.{js,css,png}', { useHash ...

  9. nginx配置反向代理或跳转出现400问题处理记录

    午休完上班后,同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...

随机推荐

  1. Mybatis传递参数的几种方式

    使用Map传递 优点:直接在sql中取出key即可 缺点:适用于小项目,不符合大公司规范 对象传递参数 优点:符合标准规范 缺点:麻烦 3.只有一个基本类型参数的情况下,直接在sql中取中 4.多个参 ...

  2. 自定义函数实现atoi功能

    思路: 列如char a[ ] ="123" "1" "2" "3' "\0" 首先遍历这个字符串 知道这个字 ...

  3. PCI协议 总结

    1.引脚 必要的引脚在左边,任选的引脚在右边 2.CLK in:时钟输入,为所有PCI上的接口传送提供时序.其频率也称为PCI的工作频率. 大部分信号都在CLK的上升沿有效 3.AD0~AD31 t/ ...

  4. 查看Linux系统、Apche、Nginx、 MySQL 、 PHP 版本

    1. 查看Linux版本: uname -a: more /etc/issue; cat /proc/version; 2. 查看Mysql版本: 在终端下执行 mysql -V #V必须大写 在he ...

  5. java 打包部署(一) windows

  6. redux和vuex以及dva?

    redux: 通过store存储,通过action唯一更改,reducer描述如何更改.dispatch一个action dva: 基于redux,结合redux-saga等中间件进行封装 vuex: ...

  7. zookeeper 负载均衡和 nginx 负载均衡区别 ?

    zk 的负载均衡是可以调控,nginx 只是能调权重,其他需要可控的都需要自己写插件:但是 nginx 的吞吐量比 zk 大很多,应该说按业务选择用哪种方式.

  8. zookeeper 是什么?zookeeper 都有哪些功能?

    zookeeper 是什么? ZooKeeper由雅虎研究院开发,是Google Chubby的开源实现,后来托管到Apache,于2010年11月正式成为Apache的顶级项目.ZooKeeper是 ...

  9. probably another instance of uWSGI is running on the same address (127.0.0.1:9090). bind(): Address ...

    probably another instance of uWSGI is running on the same address (127.0.0.1:9090). bind(): Address ...

  10. springboot远程debug调试

    案例代码: https://www.cnblogs.com/youxiu326/p/sb_promotion.html 1.首先去编辑器打开项目    2.打开Edit Configurations ...