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. CentOS8安装Geant4笔记(三):Geant4介绍、编译、安装支持Qt5界面并运行exampleB1例程显示Qt界面

    前言   上一篇,安装了Qt5环境.  本篇在服务器CentOs8.2上安装geant4软件,geant4使用Qt5来显示.   GEANT4 介绍   Geant4 是一个用于模拟粒子穿过物质的工具 ...

  2. 如何使用Google Analytics Universal Analytics增强型电子商务

    Google Analytics: Universal Analytics增强型电子商务,可以让运营人员轻松地跟踪用户在其购物历程中与产品的互动,包括产品展示.产品点击.查看产品详情.将产品添加到购物 ...

  3. RepLKNet:不是大卷积不好,而是卷积不够大,31x31卷积了解一下 | CVPR 2022

    论文提出引入少数超大卷积核层来有效地扩大有效感受域,拉近了CNN网络与ViT网络之间的差距,特别是下游任务中的性能.整篇论文阐述十分详细,而且也优化了实际运行的表现,值得读一读.试一试   来源:晓飞 ...

  4. 74CMS 3.0 SQL注入漏洞前台

    一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...

  5. Python 局域网主机存活扫描

    #! python # -*- coding: utf-8 -*- __author__ = 'Deen' import os import threading import argparse # 从 ...

  6. tomcat启动 ssm项目出现乱码的解决

    0.乱码产生原因:编码和解码的方式是不同 1.出现乱码的解决方式[推荐]: 在tomcat 的配置文件web.xml 中添加上请求编码过滤器: <!-- 请求编码过滤器 --> <f ...

  7. bzoj5315/luoguP4517 [SDOI2018]战略游戏(圆方树,虚树)

    bzoj5315/luoguP4517 [SDOI2018]战略游戏(圆方树,虚树) bzoj Luogu 题目描述略(太长了) 题解时间 切掉一个点,连通性变化. 上圆方树. $ \sum |S| ...

  8. kafka 保证消息被消费和消息只消费一次

    1. 保证消息被消费 即使消息发送到了消息队列,消息也不会万无一失,还是会面临丢失的风险. 我们以 Kafka 为例,消息在Kafka 中是存储在本地磁盘上的, 为了减少消息存储对磁盘的随机 I/O, ...

  9. 判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下?

    #!/bin/bashread -p "Input file name: " FILENAMEif [ -c "$FILENAME" ];then cp $FI ...

  10. Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

    Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件.application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置.b ...