首页 您所在的位置:网站首页 xstreamalias注解 首页

首页

#首页| 来源: 网络整理| 查看: 265

XStream 简单使用 作者: 凯哥Java 经验分享 时间:2021-10-24 02:59 1184人已阅读 网络通信 java游戏 Redis 职场 淘宝客 支付宝支付 HBuilder X Flink Java集合类 多线程 ES Ribbon eureka Docker Nacos 芋道管理系统 Solr 分布式相关 Dubbo 数据结构 EasyPOI Drools RocketMQ JS 七天深入MySQL实战营 书籍 kafka spring Java基础 java web 若依(ruoyi) 分布式事务 面试宝典 mysql java8新特性 spring cloud ElasticSearch学习系列 HM_leadnews 即时通讯 并发 思维&学习 VUE 宝塔面板 算法刷题 设计模式 RabbitMQ学习系列教程 P3C规范 JVM学习系列 反射 自定义注解 网络美文 PHP源码 经验分享 资源 git项目 websocket 网赚 数据库读写分离 测试相关 其他随笔 shiro学习系列 fremarker学习系列 学习笔录-spring boot 网络文章 工作小总结 简介 XStream是一个简单的基于Java库,Java对象序列化到XML,反之亦然(即:可以轻易的将Java对象和xml文档相互转换)。

小福利:

凯哥自己开发的,领取外卖、打车、咖啡、买菜、各大电商的优惠券的公¥众¥号。如下图:

527c8a82983e56a30f4299fc76e1956a.png

特点

使用方便 - XStream的API提供了一个高层次外观,以简化常用的用例。

无需创建映射 - XStream的API提供了默认的映射大部分对象序列化。

性能  - XStream快速和低内存占用,适合于大对象图或系统。

干净的XML  - XStream创建一个干净和紧凑XML结果,这很容易阅读。

不需要修改对象 - XStream可序列化的内部字段,如私有和最终字段,支持非公有制和内部类。默认构造函数不是强制性的要求。

完整对象图支持 - XStream允许保持在对象模型中遇到的重复引用,并支持循环引用。

可自定义的转换策略 - 定制策略可以允许特定类型的定制被表示为XML的注册。

安全框架 - XStream提供了一个公平控制有关解组的类型,以防止操纵输入安全问题。

错误消息 - 出现异常是由于格式不正确的XML时,XStream抛出一个统一的例外,提供了详细的诊断,以解决这个问题。

另一种输出格式 - XStream支持其它的输出格式,如JSON。

常见用途

传输, 持久化, 配置, 单元测试

下载

官网下载http://x-stream.github.io/download.html

或者 maven 引入

    com.thoughtworks.xstream     xstream     1.4.11.1记住以下步骤

创建XStream 对象

XStream xstream = new XStream(new StaxDriver());

2.序列化对象到XML

// Object to XML Conversion String xml = xstream.toXML(student);

3.反序列化XML获得对象。

// XML to Object Conversion Student student = (Student) xstream.fromXML(xml);类混叠

用来创建一个类的XML完全限定名称的别名

XStream.alias(String name, Class type)

例如 xstream.alias("student", Student.class);a7c093fa3e5a1f3af2d372198cc49655.png

字段混叠

字段混叠用于创建以XML字段的别名。

XStream.aliasField(String alias, Class definedIn, String fieldName)

例如 xstream.aliasField("name", Student.class, "studentName");

b6e7b4237c02b02754d92863ccea05a3.png

隐式集合混叠

使用的集合是表示在XML无需显示根。例如,在我们的例子中,我们需要一个接一个,但不是在根节点来显示每一个节点。让我们再次修改例子,下面的代码添加到它。

XStream.addImplicitCollection(Class ownerType, String fieldName)

例如 xstream.addImplicitCollection(Student.class, "notes");

acae501832c35bca47a030deeb06a997.png

属性混叠

属性混叠用于创建一个成员变量作为XML属性序列化。

xstream.useAttributeFor(Student.class, "studentName"); xstream.aliasField("name", Student.class, "studentName");

d1622b835a69dbe45dbdc18808c7753c.png

包混叠

包装混叠用于创建一个类XML的完全限定名称的别名到一个新的限定名称。

xstream.aliasPackage("my.company.xstream", "com.yiibai.xstream");

c48e34519448e6cfbf6d5dba5e0f4e3e.png

XStream 注解

XStream 支持使用注解做同样的任务。在前面的章节中,我们已经看到了下面的代码配置。

    // 创建一个类的XML完全限定名称的别名     xstream.alias("student", Student.class);     xstream.alias("note", Note.class);     // 使用的集合是表示在XML无需显示根     xstream.addImplicitCollection(Student.class, "notes");     // 成员变量作为XML属性     xstream.useAttributeFor(Student.class, "studentName");     // 用于创建以XML字段的别名     xstream.aliasField("name", Student.class, "studentName");@XStreamAlias("student")    //define class level alias class Student {         @XStreamAlias("name")   //define field level alias     @XStreamAsAttribute     //define field as attribute     private String studentName;          @XStreamImplicit        //define list as an implicit collection     private List notes = new ArrayList();

为了告诉 XStream 框架来处理注释,需要XML序列化之前添加下面的命令。xstream.processAnnotations(Student.class);或者xstream.autodetectAnnotations(true);

XStream高级XStream对象流

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"));XStream自定义转换器

XStream允许从无到有写入转换器,这样开发人员可以编写一个完全新的实现,如何对象序列化到XML,反之亦然。 转换器接口提供了三种方法。

canConvert - 检查支持的对象类型的序列化。

marshal - 序列化对象到XML。

unmarshal - 从XML对象反序列化

package xx.yy; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.xml.StaxDriver; public class XStreamTester {     public static void main(String args[]) {         XStreamTester tester = new XStreamTester();         XStream xstream = new XStream(new StaxDriver());         Student student = tester.getStudentDetails();         xstream.autodetectAnnotations(true);         xstream.registerConverter(new StudentConverter()); // 注册转换器         // Object to XML Conversion         String xml = xstream.toXML(student);         System.out.println(xml);     }     private Student getStudentDetails() {         Student student = new Student("Mahesh", "Parashar");         return student;     } } @XStreamAlias("student") class Student {     @XStreamAlias("name")     private Name studentName;     public Student(String firstName, String lastName) {         this.studentName = new Name(firstName, lastName);     }     public Name getName() {         return studentName;     } } class Name {     private String firstName;     private String lastName;     public Name(String firstName, String lastName) {         this.firstName = firstName;         this.lastName = lastName;     }     public String getFirstName() {         return firstName;     }     public String getLastName() {         return lastName;     } } class StudentConverter implements Converter {     public void marshal(Object value, HierarchicalStreamWriter writer,             MarshallingContext context) {         Student student = (Student) value;         writer.startNode("name");         writer.setValue(student.getName().getFirstName() + ","                 + student.getName().getLastName());         writer.endNode();     }     public Object unmarshal(HierarchicalStreamReader reader,             UnmarshallingContext context) {         reader.moveDown();         String[] nameparts = reader.getValue().split(",");         Student student = new Student(nameparts[0], nameparts[1]);         reader.moveUp();         return student;     }     public boolean canConvert(Class object) {         return object.equals(Student.class);     } }

XStream编写JSON

XStream支持JSON通过初始化XStream对象适当的驱动程序。 XStream目前支持JettisonMappedXmlDriver和JsonHierarchicalStreamDriver。 现在,让我们使用XStream处理JSON的代码测试。

package xxx.yyy; import java.io.Writer; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver; import com.thoughtworks.xstream.io.json.JsonWriter; public class XStreamTester {     public static void main(String args[]) {         XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {             public HierarchicalStreamWriter createWriter(Writer writer) {                 return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);             }         });         Student student = new Student("Mahesh", "Parashar");         xstream.setMode(XStream.NO_REFERENCES);         xstream.alias("student", Student.class);         System.out.println(xstream.toXML(student));     } } @XStreamAlias("student") class Student {     public String firstName;     public String lastName;     public Student(String firstName, String lastName) {         this.firstName = firstName;         this.lastName = lastName;     }     public String toString() {         return "Student [ firstName: " + firstName + ", lastName: " + lastName                 + " ]";     } }

参考

XStream教程™https://www.yiibai.com/xstream

本文来源:https://www.jianshu.com/p/d8e6c5488353

小福利:

凯哥自己开发的,领取外卖、打车、咖啡、买菜、各大电商的优惠券的公¥众¥号。如下图:

527c8a82983e56a30f4299fc76e1956a.png

很赞哦! ( 13)

网络通信 java游戏 Redis 职场 淘宝客 支付宝支付 HBuilder X Flink Java集合类 多线程 ES Ribbon eureka Docker Nacos 芋道管理系统 Solr 分布式相关 Dubbo 数据结构 EasyPOI Drools RocketMQ JS 七天深入MySQL实战营 书籍 kafka spring Java基础 java web 若依(ruoyi) 分布式事务 面试宝典 mysql java8新特性 spring cloud ElasticSearch学习系列 HM_leadnews 即时通讯 并发 思维&学习 VUE 宝塔面板 算法刷题 设计模式 RabbitMQ学习系列教程 P3C规范 JVM学习系列 反射 自定义注解 网络美文 PHP源码 经验分享 资源 git项目 websocket 网赚 数据库读写分离 测试相关 其他随笔 shiro学习系列 fremarker学习系列 学习笔录-spring boot 网络文章 工作小总结

上一篇: XStream轻松转换xml和java对象

下一篇: 电脑上已经安装了jdk,在运行某些exx文件的时候,提示还要下载安装怎么办?运行Java程序之This application requires a Java Runtime Environment xxx



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有