- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
理解Java 对象序列化
关于Java 序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java 序列
化的一个总结。此文内容涉及Java 序列化的基本原理,以及多种方法对序列化形式进行定制。
在撰写本文时,既参考了Thinking in Java, Effective Java,JavaWorld,developerWorks
中的相关文章和其它网络资料,也加入了自己的实践经验与理解,文、码并茂,希望对大家有所
帮助。(2012.02.14 最后更新)
1. 什么是Java 对象序列化
Java 平台允许我们在内存中创建可复用的Java 对象,但一般情况下,只有当JVM 处于运行时,
这些对象才可能存在,即,这些对象的生命周期不会比JVM 的生命周期更长。但在现实应用中,
就可能要求在JVM 停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对
象。Java 对象序列化就能够帮助我们实现该功能。
使用Java 对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组
装成对象。必须注意地是,对象序列化保存的是对象的状态,即它的成员变量。由此可知,对
象序列化不会关注类中的静态变量。
除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对
象时,都会用到对象序列化。Java 序列化API 为处理对象序列化提供了一个标准机制,该API
简单易用,在本文的后续章节中将会陆续讲到。
2. 简单示例
在Java 中,只要一个类实现了java.io.Serializable 接口,那么它就可以被序列化。此处将创
建一个可序列化的类Person,本文中的所有示例将围绕着该类或其修改版。
Gender 类,是一个枚举类型,表示性别
public enum Gender {
MALE, FEMALE
}
如果熟悉Java 枚举类型的话,应该知道每个枚举类型都会默认继承类java.lang.Enum ,而该
类实现了Serializable 接口,所以枚举类型对象都是默认可以被序列化的。
Person 类,实现了Serializable 接口,它包含三个字段:name,String 类型;age,Integer
类型;gender,Gender 类型。另外,还重写该类的toString()方法,以方便打印Person 实
例中的内容。
public class Person implements Serializable {
private String name = null;
private Integer age = null;
private Gender gender = null;
public Person() {
System.out.println(none-arg constructor);
}
public Person(String name, Integer age, Gender gender) {
System.out.println(arg constructor);
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
@Override
public String toString() {
return [ + name + , + age + , + gender + ];
}
}
SimpleSerial,是一个简单的序列化程序,它先将一个Person 对象保存到文件person.out
中,然后再从该文件中读出被存储的Person 对象,并打印该对象。
public class SimpleSerial {
public static void main(String[] args) throws Exception {
File
文档评论(0)