- 浏览: 7944812 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
在XML跟普通POJO的序列化过程中,有很多的方法,其中发现xstream这个包还是不错的,它的作者是大名鼎鼎的thoughtworks写的,下面简单分析下。
1 首先是POJO对象,比如:
public class Employee {
private String name;
private String designation;
private String department;
。。。。。。。。。。
2 把POJO变成XML对象
XStream xstream=new XStream(new DomDriver());
xstream.alias("employee",Employee.class);
strxml=xstream.toXML(person);
System.out.println(strxml);
3 把XML对象反序列化为POJO对象
String str="....."//XML
Employee employee=(Employee)xstream.fromXML(str);
System.out.println("姓名:"+employee.getName());
4 另外附上一个比较复杂的精彩例子:
public class XmlParser {
private static final Log log = LogFactory.getLog(XmlParser.class);
private static final String DEFAULT_ENCODING = "UTF-8";
/**
* 获取 XML 文件头 encoding 中指定字符集的查询匹配器。
*/
private static Pattern encodingPattern = Pattern.compile("<\\?xml.*\\s+encoding\\s*=\\s*[\"']?([\\w\\-_]+)[\"'\\s?><]", Pattern.DOTALL + Pattern.CASE_INSENSITIVE);
private static CustomXppDriver driver = new CustomXppDriver(new CustomReplacer());
private static boolean flat;
private static boolean notList;
/**
* 将 XML 文件解析为 Map 集合数据,使用 XML 内容指定的字符集进行编码解析,若 XML 中未指定编码,则默认使用 UTF-8 进行编码解析。
*/
public static Map parseXmlFile(String fileName) throws FileNotFoundException, UnsupportedEncodingException {
return parse(new File(fileName));
}
/**
* 将 XML 文件解析为 Map 集合数据,使用 XML 内容指定的字符集进行编码解析,若 XML 中未指定编码,则默认使用 UTF-8 进行编码解析。
*/
public static Map parse(File xmlFile) throws FileNotFoundException, UnsupportedEncodingException {
Reader reader = null;
try {
reader = getXmlEncodingReader(new FileInputStream(xmlFile));
return parse(reader);
} finally {
if (reader != null) {
try {
reader.close();
} catch (Exception ignore) {
}
}
}
}
/**
* 将 XML 字节数组解析为 Map 集合数据,使用 XML 内容指定的字符集进行编码解析,若 XML 中未指定编码,则默认使用 UTF-8 进行编码解析。
*/
public static Map parse(byte[] xmlBytes) throws UnsupportedEncodingException {
return parse(getXmlEncodingReader(new ByteArrayInputStream(xmlBytes)));
}
/**
* 将 XML 字节数组,按照指定字符集解析为 Map 集合数据。
*/
public static Map parse(byte[] xmlBytes, String encoding) throws UnsupportedEncodingException {
HierarchicalStreamReader reader = driver.createReader(new ByteArrayInputStream(xmlBytes), encoding);
return getData(reader);
}
/**
* 将 XML 字符串,解析为 Map 集合数据。
* @param xmlStr 字符串
* @return 集合数据
*/
public static Map parse(String xmlStr) {
return parse(new StringReader(xmlStr));
}
/**
* 将 XML 字节流,解析为 Map 集合数据,使用 XML 内容指定的字符集进行编码解析 */
public static Map parse(InputStream xmlStream) throws UnsupportedEncodingException {
return parse(getXmlEncodingReader(xmlStream));
}
/**
* 将 XML 字节流,按照指定字符集解析为 Map 集合数据。
* @param xmlStream 字节流
* @param encoding 字符集
* @return 集合数据
* @throws UnsupportedEncodingException 不支持的字符集异常
*/
public static Map parse(InputStream xmlStream, String encoding) throws UnsupportedEncodingException {
HierarchicalStreamReader reader = driver.createReader(xmlStream, encoding);
return getData(reader);
}
/**
* 将 XML 字符流,解析为 Map 集合数据。
* @param xmlReader 字符流
* @return 集合数据
*/
public static Map parse(Reader xmlReader) {
HierarchicalStreamReader reader = driver.createReader(xmlReader);
return getData(reader);
}
/**
* 获取字节流中 XML 内容指定的字符集编码,若 XML 中未指定编码,则返回 UTF-8。
* @param stream 字节流,必须支持 mark/reset 方法。
* @return 字符集
*/
public static String getEncoding(InputStream stream) {
String encoding = DEFAULT_ENCODING;
if (!stream.markSupported()) {
return encoding;
}
byte[] buf = new byte[70];
try {
stream.mark(100);
int len = stream.read(buf);
if (len > 0) {
String xmlHead = new String(buf, 0, len);
Matcher m = encodingPattern.matcher(xmlHead);
if (m.find()) {
encoding = m.group(1).trim();
}
}
stream.reset();
} catch (Throwable e) {
log.error("get xml encoding error!", e);
}
return encoding;
}
/**
* 将 XML 字节流,转换为支持 XML 内容指定编码的字符流,若 XML 中未指定编码,则默认使用 UTF-8 进行编码解析。
* @param stream 字节流
* @return 字符流
* @throws UnsupportedEncodingException 不支持的字符集异常
*/
private static Reader getXmlEncodingReader(InputStream stream) throws UnsupportedEncodingException {
stream = new BufferedInputStream(stream);
return new InputStreamReader(stream, getEncoding(stream));
}
/**
* 将 XML 字符流,解析为 Map 集合数据。
* @param reader XML 字符流读取对象
* @return 集合数据
*/
private static Map getData(HierarchicalStreamReader reader) {
Map data = new HashMap();
fillData(reader, data, flat);
return data;
}
/**
* 设置解析完成后,填充Map集合时是否采用集合的方法。默认采用集合方法。
* 集合:既XML节点名称相同的数据使用ArrayList集合进行存储。
* 单一:既XML节点名称相同的数据只取第一个值进行存储。
* @param notList
*/
public static void setNotList(boolean no){
notList = no;
}
public static boolean isNotList(){
return notList;
}
/**
* 设置解析完成后,是否采取平板填充模式填充 Map 集合。若不采用平板填充模式,则 Map 集合采用与 XML 节点级别相同的结构存储数据。默认不采用。
* 平板填充模式:即不论是 XML 的哪级节点数据,均填充到根集合中,若根集合已存在该名称的节点数据,则此节点名称的数据采用 List 对象顺序存储。
* @param flatType 是否采取平板填充模式。
*/
public static void setFlatType(boolean flatType) {
flat = flatType;
}
/**
* 是否采取平板填充模式填充 Map 集合?
* @return 是否采取平板填充模式。
*/
public static boolean isFlatType() {
return flat;
}
/**
* 解析 XML 字符流,并将数据填充到指定 Map 集合中。
* @param reader XML 字符流读取对象
* @param data 待填充数据集合
* @param flatType 是否采用平板填充模式
*/
private static void fillData(HierarchicalStreamReader reader, Map data, boolean flatType) {
Map childs;
String name = reader.getNodeName();
Object value;
if (!reader.hasMoreChildren()) {
value = reader.getValue();
childs = null;
} else if (!flatType) {
value = childs = new HashMap();
} else {
value = "";
childs = data;
}
Object nodeContainer = data.get(name);
//name名称重复的直接覆盖
if(notList){
if (nodeContainer == null) {
if (value != null) {
data.put(name, value);
}
}
}else{
//重复的生成list保存
if (nodeContainer == null) {
if (value != null) {
data.put(name, value);
}
} else if (nodeContainer instanceof ArrayList) {
((ArrayList)nodeContainer).add(value);
} else {
ArrayList nodeList = new ArrayList();
nodeList.add(nodeContainer);
nodeList.add(value);
data.put(name, nodeList);
}
}
while (reader.hasMoreChildren()) {
reader.moveDown();
fillData(reader, childs, flatType);
reader.moveUp();
}
}
/**
* 自定义 XPP 解析驱动类
* @author wd
*/
private static class CustomXppDriver extends XppDriver {
public CustomXppDriver() {
super(new CustomReplacer());
}
public CustomXppDriver(XmlFriendlyReplacer replacer) {
super(replacer);
}
/**
* 将 XML 字节流,转换为支持指定字符集编码的 XML 字符流读取对象。
* @param stream 字节流
* @param encoding 字符集
* @return XML 字符流读取对象
* @throws UnsupportedEncodingException 不支持的字符集异常
*/
public HierarchicalStreamReader createReader(InputStream stream, String encoding) throws UnsupportedEncodingException {
return createReader(new InputStreamReader(stream, encoding));
}
}
/**
* 自定义 XML 标签转换类
* @author wd
*/
private static class CustomReplacer extends XmlFriendlyReplacer {
public String escapeName(String name) {
return name;
}
public String unescapeName(String name) {
return name;
}
}
public static void main(String[] args) throws Exception {
java.io.ByteArrayOutputStream output = new java.io.ByteArrayOutputStream();
java.io.FileInputStream input = null;
byte[] data = new byte[1024];
int len = -1;
try {
input = new java.io.FileInputStream("c:\\test.txt");
for (;(len = input.read(data)) >= 0;) {
output.write(data, 0, len);
}
} catch (Exception e) {
throw e;
} finally {
if (input != null) {
try {
input.close();
} catch (Exception e) {
}
}
}
byte[] xmlBytes = getMsg(output.toString());
System.out.println("xml 内容=" + new String(xmlBytes, getEncoding(new java.io.ByteArrayInputStream(xmlBytes))));
XmlParser.setFlatType(true);
Map xml = XmlParser.parse(xmlBytes);
System.out.println();
System.out.println("xml 对象=" + xml);
}
1 首先是POJO对象,比如:
public class Employee {
private String name;
private String designation;
private String department;
。。。。。。。。。。
2 把POJO变成XML对象
XStream xstream=new XStream(new DomDriver());
xstream.alias("employee",Employee.class);
strxml=xstream.toXML(person);
System.out.println(strxml);
3 把XML对象反序列化为POJO对象
String str="....."//XML
Employee employee=(Employee)xstream.fromXML(str);
System.out.println("姓名:"+employee.getName());
4 另外附上一个比较复杂的精彩例子:
public class XmlParser {
private static final Log log = LogFactory.getLog(XmlParser.class);
private static final String DEFAULT_ENCODING = "UTF-8";
/**
* 获取 XML 文件头 encoding 中指定字符集的查询匹配器。
*/
private static Pattern encodingPattern = Pattern.compile("<\\?xml.*\\s+encoding\\s*=\\s*[\"']?([\\w\\-_]+)[\"'\\s?><]", Pattern.DOTALL + Pattern.CASE_INSENSITIVE);
private static CustomXppDriver driver = new CustomXppDriver(new CustomReplacer());
private static boolean flat;
private static boolean notList;
/**
* 将 XML 文件解析为 Map 集合数据,使用 XML 内容指定的字符集进行编码解析,若 XML 中未指定编码,则默认使用 UTF-8 进行编码解析。
*/
public static Map parseXmlFile(String fileName) throws FileNotFoundException, UnsupportedEncodingException {
return parse(new File(fileName));
}
/**
* 将 XML 文件解析为 Map 集合数据,使用 XML 内容指定的字符集进行编码解析,若 XML 中未指定编码,则默认使用 UTF-8 进行编码解析。
*/
public static Map parse(File xmlFile) throws FileNotFoundException, UnsupportedEncodingException {
Reader reader = null;
try {
reader = getXmlEncodingReader(new FileInputStream(xmlFile));
return parse(reader);
} finally {
if (reader != null) {
try {
reader.close();
} catch (Exception ignore) {
}
}
}
}
/**
* 将 XML 字节数组解析为 Map 集合数据,使用 XML 内容指定的字符集进行编码解析,若 XML 中未指定编码,则默认使用 UTF-8 进行编码解析。
*/
public static Map parse(byte[] xmlBytes) throws UnsupportedEncodingException {
return parse(getXmlEncodingReader(new ByteArrayInputStream(xmlBytes)));
}
/**
* 将 XML 字节数组,按照指定字符集解析为 Map 集合数据。
*/
public static Map parse(byte[] xmlBytes, String encoding) throws UnsupportedEncodingException {
HierarchicalStreamReader reader = driver.createReader(new ByteArrayInputStream(xmlBytes), encoding);
return getData(reader);
}
/**
* 将 XML 字符串,解析为 Map 集合数据。
* @param xmlStr 字符串
* @return 集合数据
*/
public static Map parse(String xmlStr) {
return parse(new StringReader(xmlStr));
}
/**
* 将 XML 字节流,解析为 Map 集合数据,使用 XML 内容指定的字符集进行编码解析 */
public static Map parse(InputStream xmlStream) throws UnsupportedEncodingException {
return parse(getXmlEncodingReader(xmlStream));
}
/**
* 将 XML 字节流,按照指定字符集解析为 Map 集合数据。
* @param xmlStream 字节流
* @param encoding 字符集
* @return 集合数据
* @throws UnsupportedEncodingException 不支持的字符集异常
*/
public static Map parse(InputStream xmlStream, String encoding) throws UnsupportedEncodingException {
HierarchicalStreamReader reader = driver.createReader(xmlStream, encoding);
return getData(reader);
}
/**
* 将 XML 字符流,解析为 Map 集合数据。
* @param xmlReader 字符流
* @return 集合数据
*/
public static Map parse(Reader xmlReader) {
HierarchicalStreamReader reader = driver.createReader(xmlReader);
return getData(reader);
}
/**
* 获取字节流中 XML 内容指定的字符集编码,若 XML 中未指定编码,则返回 UTF-8。
* @param stream 字节流,必须支持 mark/reset 方法。
* @return 字符集
*/
public static String getEncoding(InputStream stream) {
String encoding = DEFAULT_ENCODING;
if (!stream.markSupported()) {
return encoding;
}
byte[] buf = new byte[70];
try {
stream.mark(100);
int len = stream.read(buf);
if (len > 0) {
String xmlHead = new String(buf, 0, len);
Matcher m = encodingPattern.matcher(xmlHead);
if (m.find()) {
encoding = m.group(1).trim();
}
}
stream.reset();
} catch (Throwable e) {
log.error("get xml encoding error!", e);
}
return encoding;
}
/**
* 将 XML 字节流,转换为支持 XML 内容指定编码的字符流,若 XML 中未指定编码,则默认使用 UTF-8 进行编码解析。
* @param stream 字节流
* @return 字符流
* @throws UnsupportedEncodingException 不支持的字符集异常
*/
private static Reader getXmlEncodingReader(InputStream stream) throws UnsupportedEncodingException {
stream = new BufferedInputStream(stream);
return new InputStreamReader(stream, getEncoding(stream));
}
/**
* 将 XML 字符流,解析为 Map 集合数据。
* @param reader XML 字符流读取对象
* @return 集合数据
*/
private static Map getData(HierarchicalStreamReader reader) {
Map data = new HashMap();
fillData(reader, data, flat);
return data;
}
/**
* 设置解析完成后,填充Map集合时是否采用集合的方法。默认采用集合方法。
* 集合:既XML节点名称相同的数据使用ArrayList集合进行存储。
* 单一:既XML节点名称相同的数据只取第一个值进行存储。
* @param notList
*/
public static void setNotList(boolean no){
notList = no;
}
public static boolean isNotList(){
return notList;
}
/**
* 设置解析完成后,是否采取平板填充模式填充 Map 集合。若不采用平板填充模式,则 Map 集合采用与 XML 节点级别相同的结构存储数据。默认不采用。
* 平板填充模式:即不论是 XML 的哪级节点数据,均填充到根集合中,若根集合已存在该名称的节点数据,则此节点名称的数据采用 List 对象顺序存储。
* @param flatType 是否采取平板填充模式。
*/
public static void setFlatType(boolean flatType) {
flat = flatType;
}
/**
* 是否采取平板填充模式填充 Map 集合?
* @return 是否采取平板填充模式。
*/
public static boolean isFlatType() {
return flat;
}
/**
* 解析 XML 字符流,并将数据填充到指定 Map 集合中。
* @param reader XML 字符流读取对象
* @param data 待填充数据集合
* @param flatType 是否采用平板填充模式
*/
private static void fillData(HierarchicalStreamReader reader, Map data, boolean flatType) {
Map childs;
String name = reader.getNodeName();
Object value;
if (!reader.hasMoreChildren()) {
value = reader.getValue();
childs = null;
} else if (!flatType) {
value = childs = new HashMap();
} else {
value = "";
childs = data;
}
Object nodeContainer = data.get(name);
//name名称重复的直接覆盖
if(notList){
if (nodeContainer == null) {
if (value != null) {
data.put(name, value);
}
}
}else{
//重复的生成list保存
if (nodeContainer == null) {
if (value != null) {
data.put(name, value);
}
} else if (nodeContainer instanceof ArrayList) {
((ArrayList)nodeContainer).add(value);
} else {
ArrayList nodeList = new ArrayList();
nodeList.add(nodeContainer);
nodeList.add(value);
data.put(name, nodeList);
}
}
while (reader.hasMoreChildren()) {
reader.moveDown();
fillData(reader, childs, flatType);
reader.moveUp();
}
}
/**
* 自定义 XPP 解析驱动类
* @author wd
*/
private static class CustomXppDriver extends XppDriver {
public CustomXppDriver() {
super(new CustomReplacer());
}
public CustomXppDriver(XmlFriendlyReplacer replacer) {
super(replacer);
}
/**
* 将 XML 字节流,转换为支持指定字符集编码的 XML 字符流读取对象。
* @param stream 字节流
* @param encoding 字符集
* @return XML 字符流读取对象
* @throws UnsupportedEncodingException 不支持的字符集异常
*/
public HierarchicalStreamReader createReader(InputStream stream, String encoding) throws UnsupportedEncodingException {
return createReader(new InputStreamReader(stream, encoding));
}
}
/**
* 自定义 XML 标签转换类
* @author wd
*/
private static class CustomReplacer extends XmlFriendlyReplacer {
public String escapeName(String name) {
return name;
}
public String unescapeName(String name) {
return name;
}
}
public static void main(String[] args) throws Exception {
java.io.ByteArrayOutputStream output = new java.io.ByteArrayOutputStream();
java.io.FileInputStream input = null;
byte[] data = new byte[1024];
int len = -1;
try {
input = new java.io.FileInputStream("c:\\test.txt");
for (;(len = input.read(data)) >= 0;) {
output.write(data, 0, len);
}
} catch (Exception e) {
throw e;
} finally {
if (input != null) {
try {
input.close();
} catch (Exception e) {
}
}
}
byte[] xmlBytes = getMsg(output.toString());
System.out.println("xml 内容=" + new String(xmlBytes, getEncoding(new java.io.ByteArrayInputStream(xmlBytes))));
XmlParser.setFlatType(true);
Map xml = XmlParser.parse(xmlBytes);
System.out.println();
System.out.println("xml 对象=" + xml);
}
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1580方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2020前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3474info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2237import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 491https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 692public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 612https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 672https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 439https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5451 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3102微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 618https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1845什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 968本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1364原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 864public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 675在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 942-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 773一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1908介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
**XStream 概述** XStream 是一个 Java 库,用于将对象序列化为 XML,以及从 XML 反序列化回对象。它提供了一种简单而直观的...通过深入学习和实践,我们可以充分利用 XStream 的优点,提高代码的可读性和可维护性。
XStream 是一个强大的 Java 库,它允许程序员将 Java 对象序列化为 XML,反之...在阅读“xstream学习文档”时,建议重点理解其核心概念、使用示例以及自定义转换器的编写,以便在实际工作中游刃有余地应对各种需求。
总结,XStream是一个强大且灵活的工具,适用于处理Java对象与XML之间的转换。无论是开发RESTful服务、数据持久化还是XML文档处理,XStream都能提供简洁、高效的解决方案。通过深入学习和实践,你将能熟练掌握这个...
总结,Xstream.Core通过其精心设计的源代码,为C#开发者提供了一种强大而灵活的数据序列化工具。深入理解其工作原理并应用于实践,有助于提升项目开发效率和代码质量。通过对源代码的学习和实践,开发者可以更好地...
总结来说,"XStream4JavaDemo演示源码"是学习和理解XStream库的一个宝贵资源。通过这个示例,我们可以了解到XStream如何简化Java对象与XML之间的转换,以及如何自定义转换规则以满足特定需求。无论是进行数据持久化...
通过本篇内容的学习,我们了解了XStream的基本原理以及如何使用它来读写XML文件。XStream不仅简化了XML与Java对象之间的转换过程,还提高了开发效率。在实际项目中,合理利用XStream可以有效地管理复杂的数据结构。
总结起来,XStream 1.3.1是一个强大且易用的XML解析和序列化工具,为Java开发者提供了便捷的XML操作手段。虽然在某些方面可能存在局限,但通过合理的配置和使用,XStream可以有效地提升开发效率,降低XML处理的...
《XStream的高级用法与自定义输出结构详解》 XStream是一款强大的Java库,用于将Java对象序列化为XML,以及将XML反序列化回Java对象。...更多关于XStream的详细信息,可以通过提供的博文链接深入学习。
**XStream简介** XStream是一款强大的Java库,用于将Java对象序列化为XML,反之亦然。它由Joe Walnes创建,旨在提供一种简洁、直观的方式...对于需要处理XML的Java开发人员来说,XStream是一个值得学习和使用的工具。
总结来说,“XStream_1.3.chm 带 实例”压缩包提供了一个学习和使用XStream的完整资源,包括详细的API文档和实践示例,对于想要掌握Java对象和XML之间转换的开发者来说,这是一个非常有价值的参考资料。
XStream 是一个强大的 Java 库,它允许程序员以一种简洁的 XML 格式来序列化和反序列化 Java 对象...这个入门例子是学习 XStream 的良好起点,进一步探索可以包括自定义转换逻辑、处理复杂对象结构以及优化性能等方面。
在Android开发中,数据交换和持久化是常见任务,XML...结合源码学习,将有助于深入理解其内部机制,进一步提升你在XML处理方面的技能。在实际项目中,根据需求选择合适的序列化库,可以有效提高开发效率和代码质量。
总结起来,XStream是一个功能强大、易用的Java序列化库,它的"full serializer"特性使得Java对象和XML之间的转换变得简单而直接。源码的开放为开发者提供了深入学习和定制的机会,增强了其在各种应用场景中的灵活性...
总结来说,这个项目涵盖了Web开发中的多个关键技术点,包括前端的Ajax通信、JavaScript交互,以及后端的Java Servlet处理和数据序列化。通过这样的设计,用户可以在浏览新闻时享受到无缝的加载体验,提高了网站的...
在IT领域,Java和XML(eXtensible Markup Language)是两种非常重要的技术。Java是一种广泛使用的编程语言,...通过学习和理解XStream,开发者可以更高效地在Java应用程序中处理XML数据,提升开发效率并简化数据操作。
总结起来,"apache-camel-1.6.3.tar.gz"是一个包含Apache Camel 1.6.3版本源码、文档和依赖的压缩包,适用于集成和路由任务,提供了丰富的组件和强大的路由规则定义能力,为开发人员构建企业级应用提供了有力的支持...
总结来说,这个SSH2整合的简单增删改查实例,旨在帮助初学者理解如何将Spring、Struts2和Hibernate协同工作,以及如何利用Gson和Ajax实现前后端的数据交互。通过对这些技术的实践,开发者能够更好地掌握Java Web开发...
总结来说,这个压缩包提供了一个基于Apache POI的Java解决方案,用于方便地在程序中实现Excel的导入和导出。通过学习和使用提供的代码示例,开发者可以快速掌握如何在Java项目中处理Excel文件,无论是读取现有的数据...
通过阅读这些代码,我们可以学习到如何在Netty中集成SocketIO和Marshaling,理解其工作原理,并且可以作为模板来构建自己的实时通信系统。 总结来说,这个案例涉及到的关键技术点包括: 1. Netty框架:用于构建高...
总结来说,这个项目展示了如何利用Java的XML处理能力和JSON转换技巧,实现XML文件与ZTree树形结构之间的双向转换。对于熟悉Java和Web开发的程序员,这是一个很好的学习资源,有助于提升处理层次结构数据的能力。同时...