|
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- this content will be automatically generated across all content areas --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
|
级别: 中级
Rajiv Bangalore (rajiv.bangalore@in.ibm.com), 资深软件工程师, IBM India Private
Ltd.
2008 年 5 月 08 日
XML 序列化用处很多,包括对象持久化和数据传输。但是一些 XML 序列化技术实现起来可能很复杂。XStream
是一个轻量级的、简单易用的开放源代码 Java™ 库,用于将 Java 对象序列化为 XML 或者再转换回来。了解如何设置
XStream,如何使用它序列化和逆序列化对象以及从 XML 配置文件读取配置属性。
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML
中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列化工具而不是数据绑定工具,就是说不能从
XML 或者 XML Schema Definition (XSD) 文件生成类。
和其他序列化工具相比,XStream 有三个突出的特点:
- XStream 不关心序列化/逆序列化的类的字段的可见性。
- 序列化/逆序列化类的字段不需要 getter 和 setter 方法。
- 序列化/逆序列化的类不需要有默认构造函数。
不需要修改类,使用 XStream 就能直接序列化/逆序列化任何第三方类。
设置开发环境
按照下列步骤下载和安装 XStream(下载链接参见 参考资料):
- 从 Eclipse 网站下载 Eclipse。安装的时候将其解压到选定的文件夹,本文中用 eclipse_home 表示。本文假定使用
Eclipse 3.3。
- 从 XStream 网站下载最新的 XStream 稳定版本。安装的时候解压到选定的文件夹,本文用 xstream_home
表示。假定使用的 XStream 版本是 1.2.2。
- 从 Sun 网站下载 Java Platform, Standard Edition (J2SE) 软件开发工具箱(SDK)。安装到选定的文件夹,本文用
java_home 表示。假定版本为 1.5.0_05。
创建一个 Java 项目
要创建一个 Java 项目,需要选择 File > New > Project,然后按下列步骤操作:
- 选择 Java > Java Project > Next(如 图 1 所示)。
图 1. 新建 Java
项目
- 填写项目名称并单击 Next(如 图 2 所示)。
图 2. 填写项目名称
- 单击 Finish 完成该任务(如 图 3
所示)。
图 3. 完成设置
图 4 显示了新建的 Java 项目。
图 4. 新建的 Java 项目
添加 XStream 支持
按照下列步骤向新建的项目添加 XStream 库:
- 在 Eclipse 的 Project Explorer 中选择新建的项目,从 Project 菜单中选择 Properties(如 图 5 所示)。
图
5. 添加 XStream 库
- 单击 Add External JARs,从 xstream_home/lib 文件夹中选择
xstream-1.2.2.jar。
- 单击 OK 结束(如 图 6 所示)。
图 6. 完成 XStream 支持的添加
图 7 显示了添加 XStream
支持后的项目。
图 7. 添加的库
序列化对象
这个简单的例子示范了如何使用 XStream 序列化/逆序列化对象,包括两个类:Writer 和
Reader 。Writer 类使用 XStream API 把 Employee
类型的对象序列化为 XML 并存储到文件中(如 清单 1
所示)。
清单 1. Writer.java
package com.samples;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.thoughtworks.xstream.*;
public class Writer {
public static void main(String[] args) {
Employee e = new Employee();
//Set the properties using the setter methods
//Note: This can also be done with a constructor.
//Since we want to show that XStream can serialize
//even without a constructor, this approach is used.
e.setName("Jack");
e.setDesignation("Manager");
e.setDepartment("Finance");
//Serialize the object
XStream xs = new XStream();
//Write to a file in the file system
try {
FileOutputStream fs = new FileOutputStream("c:/temp/employeedata.txt");
xs.toXML(e, fs);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
}
}
|
Reader 类读取该文件,逆序列化 XML 并把数据装入 Java 对象(如 清单 2 所示)。
清单 2.
Reader.java
package com.samples;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import com.thoughtworks.xstream.*;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class Reader {
public static void main(String[] args) {
XStream xs = new XStream(new DomDriver());
Employee e = new Employee();
try {
FileInputStream fis = new FileInputStream("c:/temp/employeedata.txt");
xs.fromXML(fis, e);
//print the data from the object that has been read
System.out.println(e.toString());
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
}
}
|
清单 3 显示了 Employee
对象的结构。
清单 3. Employee.java
package com.samples;
public class Employee {
private String name;
private String designation;
private String department;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesignation() {
return designation;
}
public void setDesignation(String designation) {
this.designation = designation;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
@Override
public String toString() {
return "Name : "+this.name+
"\nDesignation : "+this.designation+
"\nDepartment : "+this.department;
}
}
|
读取配置文件
|
读取完整的 XML 文件 下面的例子说明了如何读取一个简单的
XML 文件。要读取完整的 XML 文件可能需要编写自定义的转换程序。XStream “Converter Tutorial” 网站(参见 参考资料)提供了编写转化程序的教程。
|
|
多数应用程序都要用到一些属性。这些属性可能是要连接的数据源的名称或者日志文件的位置。配置文件最适合存储这类数据,从而在修改这些属性的时候不需要重新编译应用程序,应用程序维护起来也更容易。下面的例子说明如何在应用程序中使用
XStream 从 XML 配置文件中读取配置属性。
XML 数据绑定通常需要从 XML 文件生成 Java 对象。使用 XStream 省略了生成对象这个步骤。只需要编写一个 Java
类将类的字段映射到希望读取的 XML 的元素。这个例子使用的配置文件如 清单
4 所示。
清单 4. Config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<datasource-name>IRIS</datasource-name>
<ipaddress>9.124.74.85</ipaddress>
<logfilename>DailyLogApplication.log</logfilename>
<appender>console</appender>
</config>
|
清单 5 显示的
ConfigReader 类读取该配置文件并将属性加载到 Java 对象中。
清单 5. ConfigReader.java
package com.samples;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import com.thoughtworks.xstream.*;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class ConfigReader {
String datasourcename = null;
String ipaddress = null;
String logfilename = null;
String appender = null;
@Override
public String toString() {
// This method prints out the values stored in the member variables
return "Datasource Name : "+datasourcename+
" \nIP Address : "+ipaddress+
" \nLogfilename : "+logfilename+
" \nAppender : "+appender;
}
/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
XStream xs = new XStream(new DomDriver());
FileInputStream fis = new FileInputStream("c:/temp/Config.xml");
xs.aliasField("datasource-name", ConfigReader.class, "datasourcename");
xs.alias("config", ConfigReader.class);
ConfigReader r = (ConfigReader)xs.fromXML(fis);
System.out.println(r.toString());
}
}
|
结束语
创建和开发使用 XStream 的应用程序只需要简单的几个步骤。本文介绍如何使用 XStream 序列化/逆序列化 Java 对象和读取配置文件,通过
XStream 网站(教程链接参见 参考资料)可以进一步了解别名、注解和转换程序。别名和转换程序可以让您完全控制生成的 XML。
下载
描述
名字
大小
下载方法
本文的 Java 源代码
x-xstreamcode.zip |
3KB |
HTTP |
参考资料
学习
获得产品和技术
-
Eclipse:从 Eclipse 网站下载并安装 Eclipse。
- 下载 XStream:从 XStream 网站下载这个将对象序列化为 XML 或者从 XML
生成对象的简单的库。
-
IBM 试用软件:用这些试用软件构建您的下一个开发项目,可直接从 developerWorks
下载。
讨论
关于作者
|
|
|
Rajiv Bangalore 是 IBM India 的一位资深软件工程师。在七年的职业生涯中参与过多个 Java Platform,
Enterprise Edition (Java EE) 开发项目。可以通过 rajiv.bangalore@in.ibm.com 和他联系。
|
|
相关推荐
使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列...
使用 XStream 把 Java 对象序列化为 XML
使用XStream 把 Java 对象序列化为 XML~~~~~~~~~~~~~~~~~
Xstream_java对象和xml的互相转换
这个是 对于要把数据库获得的 list 转换成 xml 有了XStream在Java对象和XML之间相互转换 就变得非常容易了 嘿嘿
使用xstream进行java类与xml文件互转解析
XStream把Java对象序列化为XML
Java到XML序列化,然后再返回 二进制文件 所有二进制工件都捆绑在-bin归档文件中。 它包括XStream jar和在构建时使用的任何其他库,或可选的运行时额外功能。 建议使用Xpp3,因为它将大大提高XStream的性能。 文献...
xstream轻松解析xml到java对象,内附样例。so easy!妈妈再也不用担心我的xml解析。
xStream可以轻易的将Java对象和xml文档相互转换,本实例详细介绍了运用xStream将对象转xml和xml转对象操作.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
博客连接 http://blog.csdn.net/zgf1991/article/details/7894427 使用XStream, java Object 与xml之间的转换,以及写入SD卡
xstream-1.1.3正反序列化JAVA对象 xstream-1.1.3.jar 使用xstream-1.1.3.jar 进行序列化 JAVA 对象的示例三个
好用的xStream XML和JAVA对象互相转换的简单示例,内附依赖的xstream-1.3.1.jar和xpp3_min-1.1.4c.jar
使用XStream序列化/反序列化对象
webService接口对接时,需要传递一个xml内容。用xStream拼接xml
android XMl 解析神奇xstream 二: 把对象转换成xm
XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索,并不需要对对象作出修改。XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类以及内部类。 在缺省情况下,XStream不...
Java对象转换成XML字符串 将List集合转换成xml文档 Map集合转换xml文档 用InputStream将XML文档转换成java对象