XML,Object,Json转换之浅析Xstream的使用

XML,Object,Json转换之浅析Xstream的使用

请尊重他人的劳动成果,转载请注明出处:XML,Json转换之浅析Xstream的使用

XStream的是一个简单的库,主要用于Java对象和XML之间的转换。但XStream也内置了对Json的支持。

1.Xstream的特点:

这里直接引用Xstream官方的叙述:

灵活易用:在更高的层次上提供了简单、灵活、易用的统一接口,用户无需了解项目的底层细节

无需映射:大多数对象都可以在无需映射的情况下进行序列化与反序列化的操作

高速稳定:设计时力求达到的最重要的指标是解析速度快、占用内存少,以使之能够适用于大的对象处理或是对信息吞吐量要求高的系统

清晰易懂:项目采用reflection机制得到无冗余信息的XML文件。所生成的XML文件较本地Java序列化产物更简洁,格式更清晰,更便于用户阅读

无需修改:完全序列化包括private和final类型在内的全部内部字段。支持非公有类和内部类,类可以没有缺省的构造函数

易于集成:通过实现特定的接口,XStream可以直接与其它任何树型结构进行序列化与反序列化操作(而不仅仅是XML格式)

灵活转换:转换策略是可以定制的,允许用户自定义特殊类型的对象如何以XML格式存储。

错误处理:由于XML资料不合法而造成异常时,会提供详细地诊断信息帮助处理问题。

2.初始化XStream类

说Xstream简单是因为它提供统一入口,主要类XStream用作所有项目的入口点。它将重要组件集成在一起,提供更简单易用的API操作。

我们可以使用以下的语句进行初始化操作:

XStreamxstream = new XStream();

默认情况下,XStream会采用Xpp3库,XPP3是一种运行效率非常高的XML全解析实现。如果你不想依靠Xpp3库的话,也可以使用一个标准的JAXP DOM解析器,可以采用以下语句进行初始化:

//不使用XPP3库

XStreamxstream = new XStream(new DomDriver());

此xstream实例,为线程安全的,可以供多个线程进行调用,共享使用。参考com.thoughtworks.xstream.io.xml包,会发现系统提供了多种标识解析器供我们选择,包括,DomDriver、JDomDriver、StaxDriver等等。


前面提到了Xstream提供了对Json的支持,是因为内置了两个Driver

1.JsonHierarchicalStreamDriver:不依赖其他类库,只实现obj->JSON

2.JettisonMappedXmlDriver:依赖jettison类库,实现JSON->obj or obj->JSON

两种Driver在处理相同设置的Object时会得到不同的JSON串,JsonHierarchicalStreamDriver得到的串更简洁,确如官网所说。

JsonHierarchicalStreamDriver有个小问题——默认输出带格式的JSON串,结构中带空格、换行,并且没有提供修饰方式。

3.常用方法:

xStream.toXML(object)将对象转换成XMLJson

xStream.toXML(obj,outputStream):将对象转换并封装成输出流。

xStream.toXML(object,writer):并封成写入流。

xStream.fromXML()转换成对象,此方法接受FileInputStreamReaderStringURL类型的参数。

xStream.alias("news",News.class)为指定类名创建别名。

xStream.useAttributeFor(News.class,"id"):将id设为News的元素的属性。

xStream.aliasField("other",BookShelf."remark"):修改节点名称,BookShelf类中的remark节点名修改为other

xStream.addImplicitCollection(BookShelf."books")去掉集体节点的父节点。

xStream.aliasAttribute("姓名",255)">"name")修改属性的name,为姓名。

4.实例1:将对象转换成XML

[java] view plain copy
  1. /**
  2. *将对象转换成Xml格式的字符串
  3. *@paramobject要转换成Xml的对象
  4. *@returnString:Xml格式的字符串
  5. */
  6. publicstaticStringconvertObject2Xml(Objectobject){
  7. xStream=newXStream();
  8. xStream.alias("news",News.class);//修改元素名称
  9. xStream.useAttributeFor(News.class,"id");//将id设为News的元素的属性
  10. returnxStream.toXML(object);
  11. }

5.实例2:将XML象转换成对象

*将成Xml格式的字符串转换成Java对象
  • *@paraminputStream要转换成Java对象的inputStream
  • staticObjectconvertXml2Object(InputStreaminputStream){
  • xStream=returnxStream.fromXML(inputStream);//此方法也可将xml转换成map
  • }


  • 6.实例3:将对象转换成Json
    *将对象转换成Json格式的字符串
  • *@paramobject要转换成Json的对象
  • *@returnString:Json格式的字符串
  • staticStringconvertObject2Json(Objectobject){
  • xStream=newXStream(newJsonHierarchicalStreamDriver(){
  • publicHierarchicalStreamWritercreateWriter(Writerout){
  • //删除根节点
  • returnnewJsonWriter(out,JsonWriter.DROP_ROOT_MODE);
  • }
  • });
  • returnxStream.toXML(object);
  • }
  • 版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

    相关推荐


    php输出xml格式字符串
    J2ME Mobile 3D入门教程系列文章之一
    XML轻松学习手册
    XML入门的常见问题(一)
    XML入门的常见问题(三)
    XML轻松学习手册(2)XML概念
    xml文件介绍及使用
    xml编程(一)-xml语法
    XML文件结构和基本语法
    第2章 包装类
    XML入门的常见问题(二)
    Java对象的强、软、弱和虚引用
    JS解析XML文件和XML字符串详解
    java中枚举的详细使用介绍
    了解Xml格式
    XML入门的常见问题(四)
    深入SQLite多线程的使用总结详解
    PlayFramework完整实现一个APP(一)
    XML和YAML的使用方法
    XML轻松学习总节篇