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.8</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");

完整代码如下:

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);
        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(1,"zhang","hi","23",34));
        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

原文地址:https://www.cnblogs.com/xibei666/p/8998998.html

时间: 2024-10-09 12:02:51

xstream实现对象的序列化和反序列化(Java)的相关文章

Java对象的序列化和反序列化

一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些s

Java基础学习总结——Java对象的序列化和反序列化

一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些s

Java对象的序列化与反序列化

我们知道Java中的对象都是存在于堆内存中的,而堆内存是可以被垃圾回收器不定期回收的.从对象被创建到被回收这一段时间就是Java对象的生命周期,也即Java对象只存活于这个时间段内. 对象被垃圾回收器回收意味着对象和对象中的成员变量所占的内存也就被回收,这意味着我们就再也得不到该对象的任何内容了,因为已经被销毁了嘛,当然我们可以再重新创建,但这时的对象的各种属性都又被重新初始化了.所以如果我们需要保存某对象的状态,然后再在未来的某段时间将该对象再恢复出来的话,则必须要在对象被销毁即被垃圾回收器回

java中对象的序列化和反序列化

[对象的序列化和反序列化 ] 1.定义:序列化--将对象写到一个输出流中.反序列化则是从一个输入流中读取一个对象.类中的成员必须是可序列化的,而且要实现Serializable接口,这样的类的对象才能被序列化和反序列化.这个接口是一个表示型的接口.serialVersionUID是一个串行化类的通用标示符,反串行化就是使用这个标示符确保一个加载的类对应一个可串行化的对象. 自己指定了serialVersionUID,就可以在序列化后,去添加一个字段,或者方法,而不会影响到后期的还原,还原后的对象

java中的对象的序列化与反序列化的知识点---IO学习笔记(四)

对象的序列化,反序列化 对象的序列化: 就是将Object转换成byte序列 对象的反序列化: 将byte序列转换成Object 序列化流,反序列化流 序列化流(ObjectOutputStream),是字节的过滤流->主要方法:writeObject() 反序列化流(ObjectInputStream)->主要方法:readObject() 序列化接口(Serializable) 对象必须实现序列化接口,才能进行序列化,否则将出现异常 这个接口,没有任何方法,只是一个标准. 基本的对象序列化

对象的序列化与反序列化---IO学习笔记(四)

对象的序列化,反序列化 对象的序列化: 就是将Object转换成byte序列 对象的反序列化: 将byte序列转换成Object 序列化流.反序列化流 序列化流(ObjectOutputStream),是字节的过滤流->主要方法:writeObject() 反序列化流(ObjectInputStream)->主要方法:readObject() 序列化接口(Serializable) 对象必须实现序列化接口.才干进行序列化.否则将出现异常 这个接口,没有不论什么方法,仅仅是一个标准. 主要的对象

对象的序列化和反序列化

一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些s

利用 进行Json对象的序列化和反序列化 - RJ - 博客园

利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 - RJ - 博客园 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 进行Json对象的序列化和反序列化 - RJ - 博客园,bubuko.com" href="http://www.bubuko.com/infodetail-217182.html" target=_blank>利用 进行Json对象的序列化和反序列

利用JavaScriptSerializer类 进行Json对象的序列化和反序列化和过滤

项目下载:JavaScriptSerializer_对JSON对象序列化与反序列化及过滤器 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 1. 首先, JavascriptSerializer类所在名空间: using System.Web.Script.Serialization; 2. 相关的3篇文章, 标记下: 使用JavaScriptSerializer进行JSON序列化 注意:    是复杂对象. JSON是Javascript中常用的数据格