XStream序列化与反序列化对象

XStream是一个将java对象序列化为xml以及从xml反序列化为java对象的开源类库。

使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列化工具而不是数据绑定工具,就是说不能从 XML 或者 XML Schema Definition (XSD) 文件生成类。
和其他序列化工具相比,XStream 有三个突出的特点:
[list]
[*]XStream 不关心序列化/逆序列化的类的字段的可见性。
[*]序列化/逆序列化类的字段不需要 getter 和 setter 方法。
[*]序列化/逆序列化的类不需要有默认构造函数。
[/list]
不需要修改类,使用 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是修改属性名称。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XStream是一种Java库,它可以将Java对象序列化XML格式,并且还可以将XML格式反序列化Java对象XStream可以非常方便地将Java对象转换为XML格式的字符串,也可以将XML格式的字符串转换为Java对象XStream的使用非常简单,只需要创建一个XStream对象,然后调用toXML()方法将Java对象序列化XML格式的字符串,或者调用fromXML()方法将XML格式的字符串反序列化Java对象。 下面是一个简单的示例,演示如何使用XStreamJava对象序列化XML格式的字符串: ``` import com.thoughtworks.xstream.XStream; public class Person { private String name; private int age; // 省略getter和setter方法 public static void main(String[] args) { Person person = new Person(); person.setName("张三"); person.setAge(25); XStream xstream = new XStream(); String xml = xstream.toXML(person); System.out.println(xml); } } ``` 在上面的代码中,我们创建了一个Person对象,并设置了name和age属性的。然后,我们创建了一个XStream对象,并调用toXML()方法将Person对象序列化XML格式的字符串。最后,我们将序列化后的字符串打印出来。 输出结果如下: ``` <person> <name>张三</name> <age>25</age> </person> ``` 可以看到,XStreamJava对象序列化为了XML格式的字符串,并且为每个属性添加了相应的XML标签。在这个例子中,我们只有两个属性,因此只有两个XML标签。如果有更多的属性,XStream会为每个属性添加相应的XML标签。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值