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的更多相关文章
- Java序列化与反序列化(实践)
Java序列化与反序列化(实践) 基本概念:序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据. 昨天在一本书上 ...
- (记录)Jedis存放对象和读取对象--Java序列化与反序列化
一.理论分析 在学习Redis中的Jedis这一部分的时候,要使用到Protostuff(Protobuf的Java客户端)这一序列化工具.一开始看到序列化这些字眼的时候,感觉到一头雾水.于是,参考了 ...
- Java序列化与反序列化
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...
- [转] Java序列化与反序列化
原文地址:http://blog.csdn.net/wangloveall/article/details/7992448 Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java ...
- Java序列化与反序列化(Serializable)
Java序列化与反序列化(Serializable) 特别注意: 1.要序列化的类必须实现Serializable借口 2.在反序列化(读取对象)的时候必须额外捕获EOFException 3.序列化 ...
- Java基础(五)-Java序列化与反序列化
.output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...
- java序列化与反序列化(转)
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...
- Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节 ...
- Java序列化与反序列化三连问:是什么?为什么要?如何做?
Java序列化与反序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象 ...
随机推荐
- [android] 线性布局和布局的组合
/****************2016年4月25日 更新******************************/ 知乎:对于开发者来说,Android 的开发者选项里有哪些实用的功能? 汤涛 ...
- [angularjs] angularjs系列笔记(四)过滤器
过滤器可以使用一个管道字符(|)添加到表达式和指令中,这不就是模板函数吗 <body> <div ng-app="Home"> <div ng-con ...
- Android Material Design控件使用(二)——FloatButton TextInputEditText TextInputLayout 按钮和输入框
FloatingActionButton 1. 使用FloatingActionButton的情形 FAB代表一个App或一个页面中最主要的操作,如果一个App的每个页面都有FAB,则通常表示该App ...
- 【Tomcat】Tomcat的类加载机制
在Tomcat中主要有以下几种类加载器:(图片来自网络) tomcat启动时,会创建几种类加载器: 1 Bootstrap 引导类加载器 加载JVM启动所需的类,以及标准扩展类,位于jre/lib/e ...
- JVM内存区域划分Eden Space,Survivor Space,Tenured Gen,Perm Gen
jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...
- 反向ajax实现原理
留言板显示留言一直刷新,那么实现原理是怎么样的? 一般发送留言就是通过正常的ajax向服务器发送数据,而实时显示留言就需要用到轮询了. 什么是轮询:就是使用定时器,每隔固定的时间从客户端向服务器发起请 ...
- margin:0 auto是什么意思
一.margin设置对象外边距 二.margin后面如果只有两个参数的话,第一个表示top和bottom,第二个表示left和right 因为0 auto
- js 冒泡排序、快速排序、去重、查找字符串最多值(面试常有)
冒泡排序 var bubbleSort = function(arr) { for (var i = 0; i < arr.length-1; i++) { for (var j = i+1; ...
- [CSS] 点击事件触发的动画
源码 https://github.com/YouXianMing/CSS-Animations/tree/master/Event 效果 细节 1) 一个完整的可回溯的动画至少包括了两种状态,以及两 ...
- mysql左连接
举个例子说明: select d.id, d.uid,d.username,d.dateline, d.message,d.replynum, c.picid, c.filename from doi ...