`
pengtyao
  • 浏览: 400962 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XStream序列化与反序列化对象

阅读更多
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是修改属性名称。
分享到:
评论

相关推荐

    使用XStream序列化/反序列化对象

    // 检查反序列化的对象是否与原始对象一致 System.out.println(deserializedPerson.getName() + ", " + deserializedPerson.getSurname() + ", " + deserializedPerson.getAge()); } } ``` 在上述代码中,`...

    Bboss和xstream序列化反序列化性能对比1

    虽然Xstream在小规模数据的反序列化上表现更快,但与Bboss相比,其优势并不明显。 对于大负荷数据,由于没有提供具体的结果,我们无法直接比较两个库的性能。然而,可以推测随着数据规模的增加,两个库的性能差距...

    xstream序列化与反序列化

    xstream中xml与javaBean的互转

    XStream对象序列化

    - **无需实现Serializable接口**:与Java的标准序列化机制不同,XStream不需要对象实现`Serializable`接口。 总之,XStream为Java开发者提供了一个强大的工具,简化了对象与XML之间的转换,尤其适用于需要持久化...

    xstream-1.1.3正反序列化JAVA对象

    标题提到的"xstream-1.1.3正反序列化JAVA对象"是指使用XStream 1.1.3版本来处理Java对象的序列化和反序列化操作。XStream的核心功能在于它可以将复杂的Java对象结构轻松地映射到XML结构上,这使得数据交换和持久化变...

    XStream <--> Java 对象序列化为 XML 互换

    使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列...

    xstream反序列化流程分析1

    在本文中,我们将深入探讨XStream库的反序列化流程,这是一个流行的Java库,用于将XML数据转换为Java对象和反之亦然。XStream的反序列化过程涉及到多个步骤,从接收XML字符串到最终创建Java对象。以下是详细的分析:...

    基于 Java 的亿赛通电子文档安全管理系统XStream反序列化漏洞任意文件上传利用

    亿赛通电子文档安全管理系统存在XStream反序列化远程代码执行漏洞,攻击者可利用该漏洞对服务器上传任意文件,进而控制服务器权限。 使用 帮助信息 $ java -jar CDGXStreamDeserRCE.jar 亿赛通电子文档安全管理...

    亿赛通电子文档安全管理系统XStream反序列化漏洞任意文件上传利用_CDGXStreamDeserRCE.zip

    亿赛通电子文档安全管理系统XStream反序列化漏洞任意文件上传利用_CDGXStreamDeserRCE

    使用 XStream 把 Java 对象序列化为 XML

    在提供的压缩包中,`sample.xml`可能是使用XStream序列化后的Java对象示例,而`src`目录可能包含了相关的Java源代码,供学习和参考。通过研究这些文件,你可以更深入地理解XStream的工作原理和使用方式。

    Java实验7 序列化.doc

    但是,XStream库能够自动处理这种情况,将关联的`Address`对象也序列化到XML中。 在这个实验中,学习了如何利用第三方库实现Java对象到XML的序列化。XStream库的使用简化了这个过程,使得我们可以方便地在Java对象...

    xStream 实现xml与 java对象的转换

    这时,xStream库应运而生,它提供了一个简单、高效的API来实现XML与Java对象之间的序列化和反序列化。 xStream库的核心概念是“映射”,它通过创建一个映射关系,将Java对象与XML元素和属性对应起来。这使得我们...

    XStream 1.3 API 手册

    XStream 是一个用 Java 编写的库,它提供了一种简单且高效的方式来序列化和反序列化对象到XML,反之亦然。这个API手册是针对XStream 1.3版本的,包含了详细的使用指南和技术信息,旨在帮助开发者更深入地理解和应用...

    xstream-1.4.9实现xml与对象互转

    通过使用 XStream 1.4.9,开发人员可以在项目中轻松地进行数据序列化和反序列化,便于数据存储和交换。尽管如此,使用时应注意安全问题,尤其是反序列化过程中可能存在的安全漏洞。理解 XStream 的基本用法和高级...

    xstream对象与xml转换

    XStream的核心功能是能够将Java对象直接映射到XML字符串,而无需编写任何额外的序列化代码。这个过程称为对象到XML的 marshalling,反向过程称为unmarshalling。 要使用XStream,首先需要在项目中引入其依赖。如果...

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

    总的来说,“使用XStream是实现XML与Java对象的转换(6)--持久化”这个主题涵盖了如何使用XStream进行对象的持久化操作,包括创建XStream实例、序列化和反序列化,以及文件I/O操作。了解这些知识点对于需要在Java项目...

    Java实现序列化与反序列化的简单示例

    - **XML序列化与反序列化**:使用第三方库如XStream,可以将对象序列化为XML格式,也可以从XML反序列化回对象。这在需要以更结构化的方式存储或传输对象时非常有用。 ```java XStream xstream = new XStream(new ...

    Xstream.Core 源代码 C#

    1. 数据存储与恢复:在持久化数据场景中,Xstream.Core可以将对象序列化为XML文件,然后在需要时反序列化回对象,便于数据的保存和读取。 2. 网络通信:在网络通信中,XML格式的数据交换是一种常见方式。Xstream....

    Xstream 相关jar包

    1. **对象序列化与反序列化**:Xstream提供了一种直观的方式来映射Java类到XML元素和属性,以及XML元素和属性到Java类。通过简单的注解或配置,开发者可以控制序列化的过程,包括字段的命名、嵌套对象的处理等。 2....

    xStream完整Jar包

    **XML 序列化与反序列化** XStream 的主要功能就是将 Java 对象序列化为 XML 和从 XML 反序列化回 Java 对象。序列化是将对象转换为 XML 字符串的过程,这有助于数据存储或传输。反序列化则相反,它将 XML 字符串...

Global site tag (gtag.js) - Google Analytics