xstream实现对象的序列化和反序列化(Java)
概述
最新整理Java方面XML序列化和反序列化的常用工具类,找到了dom4j和xstream。dom4j相对小巧,很好的解读xml;但是对于对象的xml序列化和反序列化,我还是比较喜欢xsteam(ps:个人爱好吧),这里整理xstream的入门基础知识;
使用
引用maven内容
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.</version>
</dependency>
别名配置的方式
1、可以通过类注解实现@XStreamAlias,比如XStreamAlias("book");
采用这种方式的时候,需要注意xStream实例化的时候,加上 xStream.processAnnotations(Bookstore.class); //通过注解方式的,一定要有这句话
2、可以通过配置Xstream设置实现;比如xStream.alias("book",book.class);
其他注意事项
1、将某一个类的属性,作为xml头信息的属性,而不是子节点 ,需要使用useAttributeFor,比如:xStream.useAttributeFor(book.class,"id");
2、隐藏跟属性节点的时候,需要使用addImplicitCollection,比如:xStream.addImplicitCollection(Bookstore.class,"books");
3、在Spring Boot下使用,XML转对象时,同一个类无法进行转换,原因是因为SpringBoot重新加载了对象;若未指定classloader的时候,SpringBoot未正确使用classloader,需要指定classloader,需要在方法中指定加载的类,添加如下代码: xstream.setClassLoader(clazz.getClassLoader());
完整代码如下:
Bookstore类:
package com.dbgo.xmldemo;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import java.util.List;
@XStreamAlias("bookstore")
public class Bookstore {
private List<book> books; public Bookstore(List<book> books) {
this.books = books;
}
public List<book> getBooks() {
return books;
}
public void setBooks(List<book> books) {
this.books = books;
}
}
book类
package com.dbgo.xmldemo;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("book")
public class book {
private Integer id;
private String name;
private String author;
private String year;
private double price;
public book(Integer id, String name, String author, String year, double price) {
this.id = id;
this.name = name;
this.author = author;
this.year = year;
this.price = price;
}
....省略get/set属性....
}
使用类注解解析方法
protected static void XstreamDemo(String xmsource)
{
XStream xStream=new XStream();
xStream.addImplicitCollection(Bookstore.class,"books");
xStream.processAnnotations(Bookstore.class); //通过注解方式的,一定要有这句话
xStream.processAnnotations(book.class);
xstream.setClassLoader(Bookstore.class.getClassLoader());//在spring boot一定加上这句话
Object bookstore2= xStream.fromXML(xmsource); String xmocontent=xStream.toXML(bookstore2);
System.out.println(xmocontent);
//Bookstore bookstore1= (Bookstore)xStream.fromXML(xmocontent); }
使用非类注解方法
protected static void XstreamDemo(String xmsource)
{
XStream xStream=new XStream();
xStream.alias("book",book.class);
xStream.alias("bookstore",Bookstore.class);
xStream.useAttributeFor(book.class,"id");
xStream.addImplicitCollection(Bookstore.class,"books");
Object bookstore2= xStream.fromXML(xmsource);
Bookstore bookstore=new Bookstore(new ArrayList<>());
bookstore.getBooks().add(new book(,"zhang","hi","",));
String xmocontent=xStream.toXML(bookstore);
System.out.println(xmocontent);
//Bookstore bookstore1= (Bookstore)xStream.fromXML(xmocontent); }
xml报文如下
String xmlSource="<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<bookstore>" +
" <book id=\"1\">" +
" <name>冰与火之歌</name>" +
" <author>乔治马丁</author>" +
" <year>2014</year>" +
" <price>89</price>" +
" </book>" +
" <book id=\"2\">" +
" <name>安徒生童话</name>" +
" <year>2004</year>" +
" <price>77</price>" +
" <author>English</author>" +
" </book> " +
"</bookstore>";
参考博客
java生成解析xml的另外两种方法Xstream https://www.cnblogs.com/happyPawpaw/p/4972650.html
java+xstream实现xml序列化 https://blog.csdn.net/jaryle/article/details/54893582
Bookstore.class
xstream实现对象的序列化和反序列化(Java)的更多相关文章
- Java对象的序列化与反序列化-Json篇
说到Java对象的序列化与反序列化,我们首先想到的应该是Java的Serializable接口,这玩意在两个系统之间的DTO对象里面可能会用到,用于系统之间的数据传输.或者在RPC(远程方法调用)时可 ...
- java中对象的序列化和反序列化
[对象的序列化和反序列化 ] 1.定义:序列化--将对象写到一个输出流中.反序列化则是从一个输入流中读取一个对象.类中的成员必须是可序列化的,而且要实现Serializable接口,这样的类的对象才能 ...
- Java对象的序列化与反序列化
序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等.在网络传输过程中,可以是字节或是 ...
- Java对象的序列化和反序列化[转]
Java基础学习总结--Java对象的序列化和反序列化 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化.把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用 ...
- 【Java IO流】对象的序列化和反序列化
对象的序列化和反序列化 1)对象序列化,就是将Object对象转换成byte序列,反之叫对象的反序列化. 2)序列化流(ObjectOutputStream),是字节的过滤流—— writeObjec ...
- 第12讲-Java中的IO操作及对象的序列化与反序列化
1.知识点 1.1.课程回顾 1.2.本章重点 1.2.1 io操作 1.2.2 对象的序列化与反序列化 2.具体内容 2.1.Java IO 2.1.1.什么是IO IO其实就是输入.输出 I ...
- 一文带你全面了解java对象的序列化和反序列化
摘要:这篇文章主要给大家介绍了关于java中对象的序列化与反序列化的相关内容,文中通过详细示例代码介绍,希望能对大家有所帮助. 本文分享自华为云社区<java中什么是序列化和反序列化?>, ...
- 对象的序列化与反序列化---IO学习笔记(四)
对象的序列化,反序列化 对象的序列化: 就是将Object转换成byte序列 对象的反序列化: 将byte序列转换成Object 序列化流.反序列化流 序列化流(ObjectOutputStream) ...
- ObjectOutputStream和ObjectInputStream对对象进行序列化和反序列化
1 Java序列化和反序列化简介 Java序列化是指把对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为java对象的过程. 我们把对象序列化成有序字节流,保存到本地磁盘或者Redis等 ...
随机推荐
- Python——Pycharm创建Django项目
一.Django的官网 地址:https://www.djangoproject.com/download/ 注:LTS表示一直在维护的版本,建议是带LTS的版本 二.Pycharm下载Django ...
- 记录一次有意思的XSS过滤绕过
我的朋友赵一天今晚给我发了一个站,跟我说他xss绕不过去,让我试试.我正好无事,就帮她看看咯. 通过赵一天发我的站点,说实话,我自己学到了很多东西,感谢大佬的教诲.今天分享出来: 站点:xxx.com ...
- Day045--DOM操作
一. 操作DOM的三步走 - 获取事件源 (找开关) - 事件(点一下) - 处理程序(业务逻辑)(灯亮了) 二. 获取DOM的三种方式 console.log(window); // 查看windo ...
- openstack项目【day23】:Neutron实现网络虚拟化
本节内容 一 Neutron概述 二 neutron openvswitch+gre/vxlan虚拟网络 三 neutron ovs opnflow流表和l2 population 四 dhcp ag ...
- makefile $@, $^, $<, $? 表示的意义
ref:https://www.cnblogs.com/gamesun/p/3323155.html $@ 表示目标文件$^ 表示所有的依赖文件$< 表示第一个依赖文件$? 表示比目标还 ...
- ACM-ICPC 2018 徐州赛区网络预赛 G Trace(思维+set)
https://nanti.jisuanke.com/t/31459 题意 n个矩阵,不存在包含,矩阵左下角都在(0,0),给右上角坐标,后来的矩阵会覆盖前面的矩阵,求矩阵周长. 分析 set按照x或 ...
- Oracle使用PLSQL导入数据后中文乱码的解决方法
新建环境变量 名:NLS_LANG 值:SIMPLIFIE DCHINESE_CHINA.ZHS16GBK 保存后重启PLSQL Developer 重新导入. 如果还是乱码,将上面8的环境变量值改为 ...
- Codeforces Round #527 (Div. 3) . F Tree with Maximum Cost
题目链接 题意:给你一棵树,让你找一个顶点iii,使得这个点的∑dis(i,j)∗a[j]\sum dis(i,j)*a[j]∑dis(i,j)∗a[j]最大.dis(i,j)dis(i,j)dis( ...
- sort与uniq命令详解
1.sort的作用 (排序) sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出. 如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行 ...
- Linux找回root密码
Linux忘记root密码时,密码重置步骤: 1.将虚拟机重启: 2.当进入GRUB倒计时界面,点击键盘e键: 3.点击键盘上下键选择第二行(kernel /vmlinuz-2.6.32-71.29. ...