XStream是一个将java对象序列化为xml以及从xml反序列化为java对象的开源类库。
使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列化工具而不是数据绑定工具,就是说不能从 XML 或者 XML Schema Definition (XSD) 文件生成类。
和其他序列化工具相比,XStream 有三个突出的特点:
- XStream 不关心序列化/逆序列化的类的字段的可见性。
- 序列化/逆序列化类的字段不需要 getter 和 setter 方法。
- 序列化/逆序列化的类不需要有默认构造函数。
不需要修改类,使用 XStream 就能直接序列化/逆序列化任何第三方类。
简单示例部分代码:
public static void xstreamTest(PackerInfo packerInfo, String path)
throws DocumentException, FileNotFoundException {
File file = new File(path);
System.out.println(file.getAbsolutePath());
FileOutputStream fos = new FileOutputStream(file);
XStream xstream = new XStream();
//XStream xStream = new XStream(new DomDriver());//不需要XPP3库
// 禁止使用引用标识某元素,形如:./../../element
xstream.setMode(XStream.NO_REFERENCES);
// 注册别名,缩减元素名称,将com.nightjar.bean.PackerInfo简化为parkerInfo表示
xstream.alias("parkerInfo", com.nightjar.bean.PackerInfo.class);
xstream.alias("recordInfo", com.nightjar.bean.RecordInfo.class);
// 解决Map<String,Object> 时key用String表示
xstream.alias("recordId", String.class);
FileInputStream fis = new FileInputStream(file);
// 从xml文件反序列化对象
xstream.toXML(packerInfo, fos);
// 将对象持久序列化至xml文件
if (!file.exists() || 0 >= file.length()) {
// avoid input contained no data
xstream.toXML(new PackerInfo(), fos);
}
xstream.fromXML(fis, packerInfo);
}
public class PackerInfo {
private Map<String, RecordInfo> recordMap = new HashMap<String, RecordInfo>();
//@XStreamOmitField 忽略该属性
private String routerClass;
private String packerPath;
private String packerResult;
}
public class RecordInfo {
private String versionId;
private VersionInfo version;
private String supportRainer;
private String supportOffical;
private String market;
private String productClass;
private String deviceClass;
private String pafIni;
private String lisenceIni;
private String softDescIni;
private String packerIni;
// 标识此条记录是否使能:enable,disable
private String status;
}
public class VersionInfo {
private String v;
private String r;
private String c;
private String b;
private String d;
private String sp;
private String spc;
private String spcd;
private String smk;
}
运行结果示例:
<parkerInfo>
<recordMap>
<entry>
<recordId>1234561111</recordId>
<recordInfo>
<versionId>1234561111</versionId>
<version>
<v>600</v>
<r>003</r>
<c>05</c>
<b>30</b>
<d>0</d>
<sp></sp>
<spc>10</spc>
<spcd>0</spcd>
<smk>T</smk>
</version>
<supportRainer></supportRainer>
<supportOffical></supportOffical>
<market>oc</market>
<productClass>CX</productClass>
<deviceClass>X8X16</deviceClass>
<pafIni>pafIni</pafIni>
<lisenceIni>lisenceIni</lisenceIni>
<softDescIni>softDescIni</softDescIni>
<packerIni>packerIni</packerIni>
<status>enable</status>
</recordInfo>
</entry>
</recordMap>
<routerClass>NE40E</routerClass>
<packerPath>D:/AT/packer</packerPath>
<packerResult>D:/AT/Result</packerResult>
</parkerInfo>
setMode是设置相同的对象的引用方式,如果设置XStream.NO_REFERENCES就是不引用,会输出2分相同的Student元素。如果是XStream.ID_REFERENCES会引用相同的那个对象的id属性,如果是XStream.XPATH_ABSOLUTE_REFERENCES引用,那么它将显示xpath路径。上面采用的id引用,<student reference="3"/>这个引用了id=3的那个student标签元素;
useAttributeFor是设置某个节点显示到父节点的属性中,也就是将指定class中的指定属性,在这个class元素节点的属性中显示。
如:
<student><name>hoojo</name></student>
设置好后就是这样的结果:
<student name=”hoojo”></student>
aliasAttribute是修改属性名称。
分享到:
相关推荐
// 检查反序列化的对象是否与原始对象一致 System.out.println(deserializedPerson.getName() + ", " + deserializedPerson.getSurname() + ", " + deserializedPerson.getAge()); } } ``` 在上述代码中,`...
虽然Xstream在小规模数据的反序列化上表现更快,但与Bboss相比,其优势并不明显。 对于大负荷数据,由于没有提供具体的结果,我们无法直接比较两个库的性能。然而,可以推测随着数据规模的增加,两个库的性能差距...
xstream中xml与javaBean的互转
- **无需实现Serializable接口**:与Java的标准序列化机制不同,XStream不需要对象实现`Serializable`接口。 总之,XStream为Java开发者提供了一个强大的工具,简化了对象与XML之间的转换,尤其适用于需要持久化...
标题提到的"xstream-1.1.3正反序列化JAVA对象"是指使用XStream 1.1.3版本来处理Java对象的序列化和反序列化操作。XStream的核心功能在于它可以将复杂的Java对象结构轻松地映射到XML结构上,这使得数据交换和持久化变...
使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列...
在本文中,我们将深入探讨XStream库的反序列化流程,这是一个流行的Java库,用于将XML数据转换为Java对象和反之亦然。XStream的反序列化过程涉及到多个步骤,从接收XML字符串到最终创建Java对象。以下是详细的分析:...
亿赛通电子文档安全管理系统存在XStream反序列化远程代码执行漏洞,攻击者可利用该漏洞对服务器上传任意文件,进而控制服务器权限。 使用 帮助信息 $ java -jar CDGXStreamDeserRCE.jar 亿赛通电子文档安全管理...
亿赛通电子文档安全管理系统XStream反序列化漏洞任意文件上传利用_CDGXStreamDeserRCE
在提供的压缩包中,`sample.xml`可能是使用XStream序列化后的Java对象示例,而`src`目录可能包含了相关的Java源代码,供学习和参考。通过研究这些文件,你可以更深入地理解XStream的工作原理和使用方式。
但是,XStream库能够自动处理这种情况,将关联的`Address`对象也序列化到XML中。 在这个实验中,学习了如何利用第三方库实现Java对象到XML的序列化。XStream库的使用简化了这个过程,使得我们可以方便地在Java对象...
这时,xStream库应运而生,它提供了一个简单、高效的API来实现XML与Java对象之间的序列化和反序列化。 xStream库的核心概念是“映射”,它通过创建一个映射关系,将Java对象与XML元素和属性对应起来。这使得我们...
XStream 是一个用 Java 编写的库,它提供了一种简单且高效的方式来序列化和反序列化对象到XML,反之亦然。这个API手册是针对XStream 1.3版本的,包含了详细的使用指南和技术信息,旨在帮助开发者更深入地理解和应用...
通过使用 XStream 1.4.9,开发人员可以在项目中轻松地进行数据序列化和反序列化,便于数据存储和交换。尽管如此,使用时应注意安全问题,尤其是反序列化过程中可能存在的安全漏洞。理解 XStream 的基本用法和高级...
XStream的核心功能是能够将Java对象直接映射到XML字符串,而无需编写任何额外的序列化代码。这个过程称为对象到XML的 marshalling,反向过程称为unmarshalling。 要使用XStream,首先需要在项目中引入其依赖。如果...
总的来说,“使用XStream是实现XML与Java对象的转换(6)--持久化”这个主题涵盖了如何使用XStream进行对象的持久化操作,包括创建XStream实例、序列化和反序列化,以及文件I/O操作。了解这些知识点对于需要在Java项目...
- **XML序列化与反序列化**:使用第三方库如XStream,可以将对象序列化为XML格式,也可以从XML反序列化回对象。这在需要以更结构化的方式存储或传输对象时非常有用。 ```java XStream xstream = new XStream(new ...
1. 数据存储与恢复:在持久化数据场景中,Xstream.Core可以将对象序列化为XML文件,然后在需要时反序列化回对象,便于数据的保存和读取。 2. 网络通信:在网络通信中,XML格式的数据交换是一种常见方式。Xstream....
1. **对象序列化与反序列化**:Xstream提供了一种直观的方式来映射Java类到XML元素和属性,以及XML元素和属性到Java类。通过简单的注解或配置,开发者可以控制序列化的过程,包括字段的命名、嵌套对象的处理等。 2....
**XML 序列化与反序列化** XStream 的主要功能就是将 Java 对象序列化为 XML 和从 XML 反序列化回 Java 对象。序列化是将对象转换为 XML 字符串的过程,这有助于数据存储或传输。反序列化则相反,它将 XML 字符串...