XStream小使用

XStream

目录
1 XSTREAM框架 1
1.1 XSTREAM的作用 1
1.2 XSTREAM的说明 1
2 XSTREAM的使用 1
2.1 JAVABEAN转换为XML 1
2.2 XML转换为JAVABEAN 1
2.3 JAVABEAN转化为JSON 1
2.4 JSON转化为JAVABEAN 1

1 XStream框架
1.1 XStream的作用
XStream是一个开源项目,它可以实现javaBean和xml,json之间进行轻松的转换。XStream支持将javaBean转换为xml,同时也支持将xml转换为javaBean,当然也可以将javaBean转换问json,也可以将json转换问javaBean。

1.2 XStream的说明
官网:http://xstream.codehaus.org/index.html
下载地址:http://xstream.codehaus.org/download.html
官方使用示例:http://xstream.codehaus.org/tutorial.html
打开下载地址,XStream提供了src(源码)和bin(二进制)包下载,如果想了解学习源代码可以下载src,如果只想使用就下载bin。下面简绍XStream的使用。

2 XStream的使用
下载XSteam的bin包,在java项目中加入下面包。

[img]http://dl.iteye.com/upload/attachment/0075/5595/fbbc9c0f-3424-3a1b-998d-e76cbf288657.png[/img]

创建java项目,创建转换模型User和Bbirthday类,创建一个TestUser来作为测试转换类。
XStream的toXml()方法实现了javaBean到xml,json的转化,fromXml()方法实现了xml,json到javaBean的转换。
User类

package com.model;

import com.thoughtworks.xstream.annotations.XStreamAlias;

/**
* @author xmong
*/
//annotation注解别名,即xml中的user节点名称
@XStreamAlias("user")
public class User {

//姓名
public String name;
//生日
public Birthday birthday;

public User(){
super();
}

public User(String name, Birthday birthday) {
this.name = name;
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Birthday getBirthday() {
return birthday;
}
public void setBirthday(Birthday birthday) {
this.birthday = birthday;
}

@Override
public String toString() {
return "{ name:"+this.name+"; birthday:"+this.birthday+"}";
}

}

Birthday类

package com.model;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;

//annotation注解别名,即xml中的user节点名称
@XStreamAlias("birthday")
public class Birthday {

//annotation注解属性,即xml中节点属性
@XStreamAsAttribute
int year;
@XStreamAsAttribute
int month;
int day;

public Birthday(){
super();
}

public Birthday(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}

public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}

@Override
public String toString() {
return "{year:"+this.year+"; month"+this.month+"; day"+this.day+"}";
}

}


2.1 JavaBean转化为XML

TestUser类

package com.model;

import com.thoughtworks.xstream.XStream;

/**
* @author xmong
*/
public class TestUser {

/**
* javaBean转换为xml
*/
public void test1(){

//创建user对象
User user = new User();
user.setName("xmong");
user.setBirthday(new Birthday(1990, 10, 20));

//创建xstream
XStream xstream = new XStream();
//XStream xstream = new XStream(new DomDriver());
//XStream xstream = new XStream(new StaxDriver());

//加载annotation注解
xstream.processAnnotations(User.class);

System.out.println(xstream.toXML(user));

}

public static void main(String[] args) {
TestUser tu = new TestUser();
tu.test1();
}

}


输出结果:
<user>
<name>xmong</name>
<birthday year="1990" month="10">
<day>20</day>
</birthday>
</user>


如果使用
XStream xstream = new XStream(new DomDriver())

创建XSteam对象那么输出的结果同上。
如果使用
XStream xstream = new XStream(new StaxDriver())

来创建XStream对象,输出的结果:
<?xml version="1.0" ?><user><name>xmong</name><birthday year="1990" month="10"><day>20</day></birthday></user>



2.2 XML转化为JavaBean

在TestUser的main方法调用test2方法
/**
* XML转换为JavaBean
*/
public void test2(){

//创建user对象
User user = new User();
user.setName("xmong");
user.setBirthday(new Birthday(1990, 10, 20));

//创建xstream
XStream xstream = new XStream();
//加载annotation注解
xstream.processAnnotations(User.class);

String xml = xstream.toXML(user);

System.out.println(xml);

System.out.println("===================");

System.out.println((User)xstream.fromXML(xml));

}

public static void main(String[] args) {
TestUser tu = new TestUser();
tu.test2();
}



输出结果
<user>
<name>xmong</name>
<birthday year="1990" month="10">
<day>20</day>
</birthday>
</user>
===================
{ name:xmong; birthday:{year:1990; month10; day20}}


2.3 JavaBean转化为Json

/**
* javaBean转换为json
*/
public void test3(){

//创建user对象
User user = new User();
user.setName("xmong");
user.setBirthday(new Birthday(1990, 10, 20));

//创建xstream,传入转换驱动类JettisonMappedXmlDriver
XStream xstream = new XStream( new JettisonMappedXmlDriver());
//设置user类的json别名
xstream.alias("user", User.class);

System.out.println(xstream.toXML(user));

}


public static void main(String[] args) {
TestUser tu = new TestUser();
tu.test3();
}



输出结果
{"user":{"name":"xmong","birthday":{"year":1990,"month":10,"day":20}}}


/**
* javaBean转换为json
*/
public void test4(){

//创建user对象
User user = new User();
user.setName("xmong");
user.setBirthday(new Birthday(1990, 10, 20));

//创建xstream,传入转换驱动类JsonHierarchicalStreamDriver
XStream xstream = new XStream( new JsonHierarchicalStreamDriver());
/*//去除根节点
XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
public HierarchicalStreamWriter createWriter(Writer writer) {
return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
}
});
*/

//设置user类的json别名
xstream.alias("user", User.class);

System.out.println(xstream.toXML(user));

}

public static void main(String[] args) {
TestUser tu = new TestUser();
tu.test4();
}


输出结果

{"user": {
"name": "xmong",
"birthday": {
"year": 1990,
"month": 10,
"day": 20
}
}}

如果使用
XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
public HierarchicalStreamWriter createWriter(Writer writer) {
return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
}
});

创建XStream对象,那么java对象转换成的json会去除根节点。
输出结果
{
"name": "xmong",
"birthday": {
"year": 1990,
"month": 10,
"day": 20
}
}



2.4 Json转化为JavaBean

/**
* json转换为javaBean
*/
public void test5(){

//创建user对象
User user = new User();
user.setName("xmong");
user.setBirthday(new Birthday(1990, 10, 20));

//创建xstream,传入转换驱动类JettisonMappedXmlDriver
XStream xstream = new XStream( new JettisonMappedXmlDriver());
//设置user类的json别名
xstream.alias("user", User.class);

String json = xstream.toXML(user);

System.out.println(json);
System.out.println("================");
System.out.println(xstream.fromXML(json));

}

public static void main(String[] args) {
TestUser tu = new TestUser();
tu.test5();
}


输出结果
{"user":{"name":"xmong","birthday":{"year":1990,"month":10,"day":20}}}
================
{ name:xmong; birthday:{year:1990; month10; day20}}
计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略研究(Matlab代码实现)内容概要:本文研究了计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略,并提供了基于Matlab的代码实现。研究聚焦于在高渗透率可再生能源接入背景下,如何协调微电网内部分布式电源、储能系统与大规模电动汽车充电负荷之间的互动关系,通过引入需求侧响应机制,建立多目标优化调度模型,实现系统运行成本最小化、可再生能源消纳最大化以及电网负荷曲线的削峰填谷。文中详细阐述了风电出力不确定性处理、电动汽车集群充放电行为建模、电价型与激励型需求响应机制设计以及优化求解算法的应用。; 适合人群:具备一定电力系统基础知识Matlab编程能力的研究生、科研人员及从事新能源、微电网、电动汽车等领域技术研发的工程师。; 使用场景及目标:①用于复现相关硕士论文研究成果,深入理解含高比例风电的微电网优化调度建模方法;②为开展电动汽车参与电网互动(V2G)、需求侧响应等课题提供仿真平台技术参考;③适用于电力系统优化、能源互联网、综合能源系统等相关领域的教学与科研项目开发。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注模型构建逻辑与算法实现细节,同时可参考文档中提及的其他相关案例(如储能优化、负荷预测等),以拓宽研究视野并促进交叉创新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值