JAVA序列化和反序列化XML

package com.lss.utils;

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

/**
 * JAVA序列化和反序列化XML
 * <p>
 * 属性是包含getter,setter属性生成, 序列化的类必须包含一个公共无参构造函数。
 * </p>
 *
 * @author kevin LUAN
 *
 */
public class SerializableXmlUtils {
	@SuppressWarnings("unchecked")
	public static <T> T parserXML(String xml) {
		ByteArrayInputStream in = new ByteArrayInputStream(xml.getBytes());
		XMLDecoder decoder = new XMLDecoder(new BufferedInputStream(in));
		decoder.close();
		return (T) decoder.readObject();
	}

	public static <T> String formatXML(T entity) {
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(out));
		encoder.writeObject(entity);
		encoder.close();
		return out.toString();
	}

	public static void main(String[] args) throws Exception {
		User user = new User();
		user.setId(1);
		user.setName("张三丰");
		user.setAihao(new String[] { "篮球", "足球" });
		user.setStudent(new Student(1, "二年级"));
		String xml = formatXML(user);
		System.out.println("序列化到XML:\n" + xml);
		user = parserXML(xml);
		System.out.println("反序列化Bean:\n" + user);
	}
}

# 测试Bean Code

package com.lss.utils;

import java.util.Arrays;

public class User {
	private int id;
	private String name;
	private Student student;
	private String aihao[];

	@Override
	public String toString() {
		return "{id:" + id + ",name:" + name + ",student:" + student + ",aihao:" + Arrays.toString(aihao) + "}";
	}

	public Student getStudent() {
		return student;
	}

	public void setStudent(Student student) {
		this.student = student;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String[] getAihao() {
		return aihao;
	}

	public void setAihao(String[] aihao) {
		this.aihao = aihao;
	}

}
package com.lss.utils;

public class Student {
	private int classId;
	private String level;

	public Student() {
	}

	public Student(int classId, String level) {
		this.classId = classId;
		this.level = level;
	}

	public int getClassId() {
		return classId;
	}

	public void setClassId(int classId) {
		this.classId = classId;
	}

	public String getLevel() {
		return level;
	}

	public void setLevel(String level) {
		this.level = level;
	}

	@Override
	public String toString() {
		return "{classId:" + classId + ",level:" + level + "}";
	}
}

#运行测试结果:

序列化到XML:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_45" class="java.beans.XMLDecoder">
 <object class="com.koudai.laohuji.service.User">
  <void property="aihao">
   <array class="java.lang.String" length="2">
    <void index="0">
     <string>篮球</string>
    </void>
    <void index="1">
     <string>足球</string>
    </void>
   </array>
  </void>
  <void property="id">
   <int>1</int>
  </void>
  <void property="name">
   <string>张三丰</string>
  </void>
  <void property="student">
   <object class="com.koudai.laohuji.service.Student">
    <void property="classId">
     <int>1</int>
    </void>
    <void property="level">
     <string>二年级</string>
    </void>
   </object>
  </void>
 </object>
</java>

反序列化Bean:

{id:1,name:张三丰,student:{classId:1,level:二年级},aihao:[篮球, 足球]}

JAVA序列化和反序列化XML

时间: 2024-10-25 07:42:21

JAVA序列化和反序列化XML的相关文章

JAVA 序列化和反序列化XML

import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; /** * JAVA序列化和反序列化->XML * <p> *公共无参构造函

Java序列化与反序列化(实践)

Java序列化与反序列化(实践) 基本概念:序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据. 昨天在一本书上看到了,好好实践了一下,序列化为一般文件,也序列化为XML文件(使用XStream). 用于序列化的实体类Person.java    代码如下(记得需要实现Serializable接口):import java.io.Serializable; @SuppressWarnings("serial&

java序列化和反序列化

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

java序列化与反序列化以及浅谈一下hadoop的序列化

1.什么是序列化和反序列化 神马是序列化呢,序列化就是把内存中的对象的状态信息,转换成字节序列以便于存储(持久化)和网络传输.(网络传输和硬盘持久化,你没有一定的手段来进行辨别这些字节序列是什么东西,有什么信息,这些字节序列就是垃圾). 反序列化就是将收到字节序列或者是硬盘的持久化数据,转换成内存中的对象. 2.JDK的序列化 JDK的序列化只有实现了serializable接口就能实现序列化与反序列化,但是记得一定要加上序列化版本ID serialVersionUID 这个是识别序列化的之前那

【java基础知识】【java序列化与反序列化及序列化ID】

今天上午学习了java序列化与反序列化及serialVersionUID的用处. 一.序列化与反序列化的作用: 对象的序列化主要有两种用途:1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中:2) 在网络上传送对象的字节序列. 因为不对对象序列化的化容易出现很多问题,所以引入了序列化解决了这些问题. 对象序列化包括如下步骤:1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流:2) 通过对象输出流的writeObject()方法写对象.对象反序列化的步骤如下:1

(记录)Java序列化与反序列化

在学习Redis中的Jedis这一部分的时候,要使用到Protostuff(Protobuf的Java客户端)这一序列化工具.一开始看到序列化这些字眼的时候,感觉到一头雾水.于是,参考了网上的很多资料,理解了Java序列化与反序列化(参考https://blog.csdn.net/wangloveall/article/details/7992448/),Protobuf的作用以及在Java中的使用方法. 1.Java序列化与反序列化是什么: Java序列化是指把Java对象转换为字节序列的过程

Java 序列化和反序列化(二)Serializable 源码分析 - 1

目录 Java 序列化和反序列化(二)Serializable 源码分析 - 1 1. Java 序列化接口 Java 序列化和反序列化(二)Serializable 源码分析 - 1 在上一篇文章中讲解了一下 Serializable 的大致用法,本节重点关注 Java 序列化的实现,围绕 ObjectOutputStream#writeObject 方法展开. 1. Java 序列化接口 Java 为了方便开发人员将 Java 对象进行序列化及反序列化提供了一套方便的 API 来支持.其中包

Java 序列化和反序列化(三)Serializable 源码分析 - 2

目录 Java 序列化和反序列化(三)Serializable 源码分析 - 2 1. ObjectStreamField 1.1 数据结构 1.2 构造函数 2. ObjectStreamClass Java 序列化和反序列化(三)Serializable 源码分析 - 2 在上一篇文章中围绕 ObjectOutputStream#writeObject 讲解了一下序列化的整个流程,这中间很多地方涉及到了 ObjectStreamClass 和 ObjectStreamField 这两个类.

夯实Java基础系列22:一文读懂Java序列化和反序列化

本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com 本文参考 http://www.importnew.com/17964.html和 https://www.ibm.com/developerworks/cn/java/j-lo-serial/ 序列化与反序列化概念 序列化 (S