首页 | 您所在的位置:网站首页 › xstreamalias注解 › 首页 |
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文档相互转换)。
小福利: 凯哥自己开发的,领取外卖、打车、咖啡、买菜、各大电商的优惠券的公¥众¥号。如下图: 使用方便 - 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); 字段混叠用于创建以XML字段的别名。 XStream.aliasField(String alias, Class definedIn, String fieldName)例如 xstream.aliasField("name", Student.class, "studentName"); 使用的集合是表示在XML无需显示根。例如,在我们的例子中,我们需要一个接一个,但不是在根节点来显示每一个节点。让我们再次修改例子,下面的代码添加到它。 XStream.addImplicitCollection(Class ownerType, String fieldName)例如 xstream.addImplicitCollection(Student.class, "notes"); 属性混叠用于创建一个成员变量作为XML属性序列化。 xstream.useAttributeFor(Student.class, "studentName"); xstream.aliasField("name", Student.class, "studentName");包装混叠用于创建一个类XML的完全限定名称的别名到一个新的限定名称。 xstream.aliasPackage("my.company.xstream", "com.yiibai.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编写JSONXStream支持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 小福利: 凯哥自己开发的,领取外卖、打车、咖啡、买菜、各大电商的优惠券的公¥众¥号。如下图: 很赞哦! ( 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 实验室设备网 版权所有 |