XStream的简单使用
XStream的简单使用
参考
- http://x-stream.github.io/tutorial.html xstream官方教程
- http://www.cnblogs.com/LiZhiW/p/4313493.html#_label3 xstream基本的教程
简单介绍
- XStream是一个简单的将javabean转换为XML形式的框架,非常的简单方便,同时对于注解也是支持的,也是很简单!
实战
依赖
<dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.9</version>
</dependency>
下面的这个依赖之前介绍过!
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.6</version>
</dependency>
第一个例子
package test;
import com.thoughtworks.xstream.XStream;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;/*** Created by wangji on 2017/3/20.*/@Slf4j
@Data
@Accessors(chain = true)
public class Person {private String name;private String old;public static void main(String[] args) {XStream xstream = new XStream();Person person = new Person().setOld("old").setName("name");String xml = xstream.toXML(person);log.info(xml);}
}
输出结果:
<test.Person>//类名称,要想从新命名可以的<name>name</name><old>old</old>
</test.Person>
从新命名包名称
@Slf4j
@Data
@Accessors(chain = true)
public class Person {private String name;private String old;public static void main(String[] args) {XStream xStream = new XStream();Person person = new Person().setOld("old").setName("name");xStream.alias("package",Person.class);//重新命名类xStream.aliasField("nameString",Person.class,"name");//为类的字段重新命名String xml = xStream.toXML(person);log.info(xml);}
}
输出结果:
<package><nameString>name</nameString><old>old</old>
</package>
除了这个还有这个!
xstream.omitField(Person.class, “friends”);把字段节点隐藏
Xstream.addImplicitCollection()省略集合根节点,看参考的文档
Xstream注解
一般的注解
package test;import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;/*** Created by wangji on 2017/3/23.*/
@Data
@Accessors(chain = true)
@Slf4j
@XStreamAlias("student-ww")
public class Student {@XStreamAlias("name-ww")private String name;@XStreamAlias("old-ww")private String old;public static void main(String[] args) {XStream xstream = new XStream();xstream.processAnnotations(Student.class);Student student = new Student().setOld("old").setName("name");log.info(xstream.toXML(student));}
}
输出结果:
<student-ww><name-ww>name</name-ww><old-ww>old</old-ww>
</student-ww>
省略集合根节点:@XStreamImplicit
隐藏字段:@XStreamOmitField
设置转换器
@XStreamConverter(),转换器的意思就是在输出前做个处理。
@Data
@Accessors(chain = true)
@Slf4j
@XStreamAlias("student-ww")
public class Student {@XStreamAlias("name-ww")private String name;@XStreamAlias("old-ww")private String old;@XStreamConverter(value=BooleanConverter.class,booleans={false},strings={"男","女"})private boolean sex;public static void main(String[] args) {XStream xstream = new XStream();xstream.processAnnotations(Student.class);Student student = new Student().setOld("old").setName("name").setSex(true);log.info(xstream.toXML(student));}
}
输出结果:
<student-ww><name-ww>name</name-ww><old-ww>old</old-ww><sex>男</sex>
</student-ww>
自定义一个转换器
package test;import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;/*** Created by wangji on 2017/3/23.*/
public class StudentConvert implements Converter {//定义转换器能转换的JavaBean类型public boolean canConvert(Class aClass) {return aClass.isAssignableFrom(Student.class);}把对象序列化成XMLpublic void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext marshallingContext) {Student student = (Student) value;writer.startNode("姓名");writer.setValue(student.getName());writer.endNode();writer.startNode("年龄");writer.setValue(student.getOld()+"");writer.endNode();writer.startNode("转换器");writer.setValue("自定义的转换器");writer.endNode();}//把XML反序列化成对象public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader, UnmarshallingContext unmarshallingContext) {return null;}}
使用转换器
@Data
@Accessors(chain = true)
@Slf4j
@XStreamAlias("student-ww")
public class Student {@XStreamAlias("name-ww")private String name;@XStreamAlias("old-ww")private String old;public static void main(String[] args) {XStream xstream = new XStream();xstream.processAnnotations(Student.class);Student student = new Student().setOld("old").setName("name");xstream.registerConverter(new StudentConvert());log.info(xstream.toXML(student));}
}
因为被覆盖了,所以无效!
<student-ww><姓名>name</姓名><年龄>old</年龄><转换器>自定义的转换器</转换器>
</student-ww>
Xstream对象流
输出流的意思,就是输出结果的意思,我们可以随意的输出各种结果:
http://x-stream.github.io/objectstream.html
package test;import com.thoughtworks.xstream.XStream;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;import java.io.IOException;
import java.io.ObjectOutputStream;/*** Created by wangji on 2017/3/20.*/@Slf4j
@Data
@Accessors(chain = true)
public class Person {private String name;private String old;public static void main(String[] args) {try {XStream xStream = new XStream();Person person = new Person().setOld("old").setName("name");ObjectOutputStream out = xStream.createObjectOutputStream(System.out);out.writeObject(person);out.writeObject("Hello");out.writeInt(12345);out.close();} catch (IOException e) {e.printStackTrace();}}
}
输出结果:
<object-stream><test.Person><name>name</name><old>old</old></test.Person><string>Hello</string><int>12345</int>
</object-stream>
利用对象流增加XML声明
利用继承的特性,覆盖掉父类的toXML(Object obj, Writer writer),先输出一部分的xml的声明;
/*** Created by wangji on 2017/3/23.* 增加XML声明,默认XStream是没有XML声明的*/
public class XmlUtf8Xstream extends XStream {/*** xml版本号,默认1.0*/private String version;/*** xml编码,默认UTF-8*/private String encoding;public XmlUtf8Xstream() {this("1.0","UTF-8");}//XML的声明public String getDeclaration() {return "< ?xml version=\"" + this.version + "\" encoding=\"" + this.encoding + "\"? >\n";}public XmlUtf8Xstream(String version, String encoding) {this.version = version;this.encoding = encoding;}/*** 覆盖父类的方法,然后调用父类的,输出的时候先输出这个XML的声明* @param obj* @param output*/@Overridepublic void toXML(Object obj, OutputStream output){try {String dec = this.getDeclaration();byte[] bytesOfDec = dec.getBytes("UTF-8");output.write(bytesOfDec);} catch (Exception e) {throw new RuntimeException("error", e);}super.toXML(obj, output);}@Overridepublic void toXML(Object obj, Writer writer) {try {writer.write(getDeclaration());} catch (Exception e) {throw new RuntimeException("error", e);}super.toXML(obj, writer);}}
例子:
@Slf4j
@Data
@Accessors(chain = true)
public class Person implements PersonIn {private String name;private String old;public static void main(String[] args) {XStream xStream = new XmlUtf8Xstream();xStream.alias("package",Person.class);Person person = new Person().setOld("old").setName("name");log.info(xStream.toXML(person));}
}
输出结果:
< ?xml version="1.0" encoding="UTF-8"?>
<package><name>name</name><old>old</old>
</package>
XStream的简单使用相关推荐
- XStream生成简单的XMl文件2
1.新建RequestInfo.java文件: package com.saicfc.pmpf.resume.ccb.utils;/*** 支付查询请求信息* @author lizhiyong* @ ...
- XStream将XML转换为JAVA对象快速指南
XStream是一套简单实用的JAVA类库,它用于序列化对象和XML对象之间互相转换.由于XStream配置简单,灵活易用,因此在XML对象和JAVA对象序列化市场上有很大的空间.本文并不会对XStr ...
- xstream操作xml
一.基本使用 (1)Xstream介绍 Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射 ...
- 《大数据》2015年第3期“网络大数据专题”——从系统角度审视大图计算
从系统角度审视大图计算 吴城文,张广艳,郑纬民 (清华大学计算机科学与技术系 北京 100084) 摘要:大图计算已经成为学术界和工业界的一种基本计算模式,并且已经被应用到许多实际的大数据计算问题上, ...
- 一次代码重构之旅-快速读写xml文件工具类封装
为了满足系统的灵活性,有些功能经常需要用到配置文件,一般是xml格式的居多.如何能快速读写配置文件呢? 以前都是用dom4j提供的api来读写xml文件,用dom4j读写配置文件总感觉像是在结构化的处 ...
- 最受欢迎的Java第三方库
目录 前言 Core核心库 HTML, XML解析 Web框架 图标,报表,图形 窗口库 GUI框架 自然语言处理 静态分析 JSON 数学 日志 Office相关 日期和时间 数据库 开发工具 前言 ...
- JAVA Bean和XML之间的相互转换 - XStream简单入门
JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...
- xstream java_XStream将java转化成xml的简单使用
XStream可以用来将java实体转化成xml形式的字符串, 也可以将xml文档的字符串读取成java实体. jar包依赖地址 com.thoughtworks.xstream xstream ${ ...
- 看看XStream注解
前文展示了使用别名更改XML展示内容,在这一节,可以使用注解更简单的更改XML展示. (1)最简单的注解示例 1. 输出响应消息 package com.favccxx.favsoft.pojo; p ...
最新文章
- CentOS下安装ZooKeeper
- 一种投影法的点云目标检测网络
- extjs window显示在顶层
- 物联网产品:你需要知道的9种智能家居产品
- 阿里云开发大会——体验云效智能代码补全
- SSM项目spring配置文件详细步骤(分门别类、灵巧记忆)
- ManicTime软件破解
- charles 安装 ssl_「从零开始Python爬虫」1.7.1 Charles的安装与配置
- 信息学奥赛一本通C++语言——1008:计算(a+b)/c的值
- apt java8_Ubuntu 18.04安装Java JDK8三种方式
- 另一种思路比较2个日期是否相等的方式
- Windows Azure 配置Active Directory 主机(1)
- 数电educoder的verilog参考答案
- coreldraw x4如何重叠图片_怎么用CDR x4(coreldraw x4)裁剪图片?x4怎么自动抠图
- Pytorch入门教程学习笔记(六)循环神经网络RNN(学周杰伦写歌)
- fun在c语言中意义与用法,fun的用法
- github上关于iOS的各种开源项目集合 (转载)
- ssm + redis
- 如何把一个网页设置快捷方式放到桌面上去,或者手机桌面当App一样使用
- 【spss统计分析】#1数据的录入