XStream简单入门
简单的讲,XStream 涉及的就五个知识点:详情参考 官网
混叠,注解,转换器,对象流和操作json!
下面就用几个简单的例子来实现上述五个知识点!
基本步骤:
第1步:创建XStream对象。
通过它传递一个StaxDriver创建XStream对象。StaxDriver使用SAX解析器(可从Java6),一个快速的XML解析器。
XStream xstream = new XStream(new StaxDriver());
第2步:序列化对象到XML。
使用toXML() 方法来获取对象的XML字符串表示。
//Object to XML ConversionString xml = xstream.toXML(student);
第3步:反序列化XML获得对象。
使用 fromXML()方法来从XML对象。
//XML to Object Conversion Student student1 = (Student)xstream.fromXML(xml);
例一:
通过实体生成xml
);
Address address=);
student.setAddress(address);
);
return student;
}
}
输出上例相同的结果!
对象流
XStream提供java.io.ObjectInputStream和java.io.ObjectOutputStream替代实现,使对象流可以被序列化或XML序列化。当大对象集要被处理,保持在存储器中的一个对象,这是特别有用的。
语法 : createObjectOutputStream()
ObjectOutputStream objectOutputStream = xstream.createObjectOutputStream(new FileOutputStream("test.txt"));
语法 :createObjectInputStream()
ObjectInputStream objectInputStream = xstream.createObjectInputStream(new FileInputStream("test.txt"));
对象流测试代码
public class XStream_test_5 {
public static void main(String... args) {
XStream mXStream = new XStream(new DomDriver());
mXStream.autodetectAnnotations(true);
Student student1=new Student("ma0","ss0");
Student student2=new Student("ma1","ss1");
Student student3=new Student("ma2","ss2");
Student student4=new Student("ma3","ss3");
try {
ObjectOutputStream os=mXStream.createObjectOutputStream(new FileOutputStream("text.txt"));
os.writeObject(student1);
os.writeObject(student2);
os.writeObject(student3);
os.writeObject(student4);
os.writeObject("Hello World!");
os.close();
ObjectInputStream in=mXStream.createObjectInputStream(new FileInputStream("text.txt"));
Student student5= (Student) in.readObject();
Student student6= (Student) in.readObject();
Student student7= (Student) in.readObject();
Student student8= (Student) in.readObject();
String txt= (String) in.readObject();
System.out.println(student5);
System.out.println(student6);
System.out.println(student7);
System.out.println(student8);
System.out.println(txt);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
@XStreamAlias("student")
public class Student {
private String firstName;
private String lastName;
public Student(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public String toString() {
return "Student{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
'}';
}
}
结果如下 :
Json操作
实体类,还是用上面的Student类
测试代码:
public class XStream_test_6 {
public static void main(String... args) {
XStream xStream=new XStream(new JsonHierarchicalStreamDriver(){
@Override
public HierarchicalStreamWriter createWriter(Writer out) {
return new JsonWriter(out, JsonWriter.DROP_ROOT_MODE);
}
});
Student student=new Student("ss","ssss");
xStream.setMode(XStream.NO_REFERENCES);
xStream.alias("student",Student.class);
System.out.println(xStream.toXML(student));
}
}
结果如下:
通过上述例子看XStream在解释xml是非常的方便,转换器主要是能改变xml文件的字段名
更多详解,请看官网!
综合例子:
解释如下xml文件:为方便就另保存在 xml.txt文件中
<?xml version="1.0" encoding="utf-8"?>
<alipay>
<is_success>T</is_success>
<request>
<param name="_input_charset">utf-8</param>
<param name="service">single_trade_query</param>
<param name="partner">20889010000000</param>
<param name="out_trade_no">7_20130223150319_26</param>
</request>
<response>
<trade>
<total_fee>0.01</total_fee>
<trade_no>2013022356736989</trade_no>
<trade_status>TRADE_SUCCESS</trade_status>
<use_coupon>F</use_coupon>
</trade>
</response>
<sign>6c472babf7bd98ascb97fee1666a3303</sign>
<sign_type>MD5</sign_type>
</alipay>
写实体如下
@XStreamAlias("alipay")
public class Alipay {
private String is_success;
private String sign;
private String sign_type;
public Request request;
public Response response;
@Override
public String toString() {
return "Alipay{" +
"is_success='" + is_success + '\'' +
", sign='" + sign + '\'' +
", sign_type='" + sign_type + '\'' +
", request=" + request +
", response=" + response +
'}';
}
}
@XStreamAlias("request")
class Request{
// @XStreamImplicit(itemFieldName = "param")
@XStreamImplicit(itemFieldName = "param")
public List<Param> params;
public Request(List<Param> params) {
this.params = params;
}
@Override
public String toString() {
return "Request{" +
"param=" + params +
'}';
}
}
@XStreamAlias("trade")
class Trade{
private String total_fee;
private String trade_no;
private String trade_status;
private String use_coupon;
@Override
public String toString() {
return "Trade{" +
"total_fee='" + total_fee + '\'' +
", trade_no='" + trade_no + '\'' +
", trade_status='" + trade_status + '\'' +
", use_coupon='" + use_coupon + '\'' +
'}';
}
}
/**
* ToAttributedValueConverter 取得value值
* 解释格式 如 <param name="_input_charset">utf-8</param>
* 用@XStreamConverter(value=ToAttributedValueConverter.class, strings={"param"})
* strings={"param"}中的param来接收xml中param中的值utf-8
*/
//@XStreamAlias("param")
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"param"})
class Param{
@XStreamAsAttribute()
private String name;
public String param;
@Override
public String toString() {
return "Param{" +
"name='" + name + '\'' +
", param='" + param + '\'' +
'}';
}
}
@XStreamAlias("response")
class Response{
private Trade trade;
@Override
public String toString() {
return "Response{" +
"trade=" + trade +
'}';
}
}
测试代码如下:
public class XStrem_alipay {
public static void main(String... args) {
try {
Alipay alipay= XmlUtil.toBeanFromFile("xml.txt",Alipay.class);
System.out.println(alipay);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意:toBeanFromFile是把xml转换成实体对象的方法,比较简单,综合来看XStream来解释xml是非常的方便,其中要注意的地方是这种 <param name="_input_charset">utf-8</param>
要使用转换器来获取param中的Value,还好框架已实现了,只要在类中加上@XStreamConverter(value=ToAttributedValueConverter.class, strings={"param"})
该注解,一切都变得很容易!!
XStream简单入门的更多相关文章
- JAVA Bean和XML之间的相互转换 - XStream简单入门
JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...
- 用IntelliJ IDEA创建Gradle项目简单入门
Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...
- [原创]MYSQL的简单入门
MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...
- Okio 1.9简单入门
Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...
- emacs最简单入门,只要10分钟
macs最简单入门,只要10分钟 windwiny @2013 无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...
- 【java开发系列】—— spring简单入门示例
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
- Docker 简单入门
Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- git简单入门
git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...
随机推荐
- Linux学习心得之 linux命令
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本篇博客是对 每日一linux命令(http://www.cnblogs.com/pe ...
- ArcGIS中国工具应用:固定比例尺固定纸张批量打印
ArcGIS中国工具应用:固定比例尺固定纸张批量打印 下载地址:http://files.cnblogs.com/files/gisoracle/a3batchprint.zip 固定A3,比例尺1: ...
- iOS之两个ImageView实现图片滚动
原创作者:codingZero 导语 在不少项目中,都会有图片轮播这个功能,现在网上关于图片轮播的框架层出不穷,千奇百怪,笔者根据自己的思路,用两个imageView也实现了图片轮播,这里说说笔者的主 ...
- iOS之2016面试题二
前言 招聘高峰期来了,大家都非常积极地准备着跳槽,那么去一家公司面试就会有一堆新鲜的问题,可能不会,也可能会,但是了解不够深.本篇文章为群里的小伙伴们去要出发公司的笔试题,由笔者整理并提供笔者个人参考 ...
- 分布式集群系统下的高可用session解决方案
目前,为了使web能适应大规模的访问,需要实现应用的集群部署. 而实现集群部署首先要解决session的统一,即需要实现session的共享机制. 目前,在集群系统下实现session统一的有如下几种 ...
- $是对string.Format的简化
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- MS SQL 排序规则总结
排序规则术语 什么是排序规则呢? 排序规则是根据特定语言和区域设置标准指定对字符串数据进行排序和比较的规则.SQL Server 支持在单个数据库中存储具有不同排序规则的对象.MSDN解 ...
- 使用EF自带的EntityState枚举和自定义枚举实现单个和多个实体的增删改查
本文目录 使用EntityState枚举实现单个实体的增/删/改 增加:DbSet.Add = > EntityState.Added 标记实体为未改变:EntityState.Unchange ...
- 正则表达式解析URL
正则表达式: var match = /^((ht|f)tps?:)\/\/([\w-]+(\.[\w-]+)*\/){1}(([\w-]+(\.[\w-]+)*\/?)*)?(\?([\w\-\., ...
- 【转】详细分析Java中断机制
原文地址:http://www.infoq.com/cn/articles/java-interrupt-mechanism 1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制 ...