首页 / JAVA / Java序列化全面解析
Java序列化全面解析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java序列化全面解析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3049字,纯文字阅读大概需要5分钟。
内容图文
![Java序列化全面解析](/upload/InfoBanner/zyjiaocheng/1231/5cb0a1966c914d5c89f3f9d48a23d599.jpg)
序列化是将对象状态转换为可保持或可传输的格式过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。 序列化为一般文件或字节流,也序列化为XML文件(使用XStream)。
假设被序列化的类为Student,定义如下:
package com.tds; import java.io.Serializable; public class Student implements Serializable { /** * */ private static final long serialVersionUID = 1L; private Integer id; private String name; public Student(Integer id, String name) { this.id = id; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
序列化与反序列化的工具类如下:
package com.tds; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import com.thoughtworks.xstream.XStream; /** * 序列化的工具类 * @author Administrator * */ public class SerializableUtils { private static XStream xStream = new XStream(); /** * 把对象序列byte流 * @param obj * @return * @throws Exception */ public static <T> byte[] objectToByte(T obj) throws Exception { if (obj == null) { return null; } ByteArrayOutputStream byteArrayOs = new ByteArrayOutputStream(); ObjectOutputStream oOs = new ObjectOutputStream(byteArrayOs); oOs.writeObject(obj); return byteArrayOs.toByteArray(); } /** * 把对象从byte流中反序列化 * @param b * @return * @throws IOException */ @SuppressWarnings("unchecked") public static <T> T byteToObject(byte[] b) throws Exception { if (b == null || b.length == 0) { return null; } ByteArrayInputStream byteArrayIs = new ByteArrayInputStream(b); ObjectInputStream oIs = new ObjectInputStream(byteArrayIs); return (T)oIs.readObject(); } /** * 把对象序列化为xml * @param obj * @return */ public static <T> String objectToXml(T obj) { return xStream.toXML(obj); } /** * 把对象从xml反序更化为对象 * @param xml * @return */ @SuppressWarnings("unchecked") public static <T> T xmlToObject(String xml) { return (T)xStream.fromXML(xml); } }
在针对XStream序列化的时候,我们需要引入相关的jar包,下载地址如下:
http://xstream.codehaus.org/download.html ,添加相关的Jar包,即XStream.jar和xstream目标下所有jar包,当然有些jar包是多余的,相关的jar包如下:
package com.tds; public class Test { public static void main(String[] args) throws Exception { Student s1 = new Student(1, "张三"); byte[] b1 = SerializableUtils.objectToByte(s1); Student s2 = SerializableUtils.byteToObject(b1); System.out.println("s2: " + s2.getId() + " " + s2.getName()); String xml = SerializableUtils.objectToXml(s1); System.out.println(xml); Student s3 = SerializableUtils.xmlToObject(xml); System.out.println("s3: " + s3.getId() + " " + s3.getName()); } }运行结果如下:
s2: 1 张三
<com.tds.Student>
<id>1</id>
<name>张三</name>
</com.tds.Student>
s3: 1 张三
说明序列化与反序列化均是成功的
补充一下,java的序列化对transient变量是不起作用的,这也是transient的作用,如果Student类的id字段修改为transient,即修改为:
private transient Integer id;修改后的运行结果如下:
s2: null 张三
<com.tds.Student>
<name>张三</name>
</com.tds.Student>
s3: null 张三
这是我们发现,id字段确实没有被序列化;
原文:http://blog.csdn.net/tiandesheng111/article/details/39860819
内容总结
以上是互联网集市为您收集整理的Java序列化全面解析全部内容,希望文章能够帮你解决Java序列化全面解析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。