这几天受领导委托,做了一个java序列化的说明资料。
本身没什么技术含量,这里做一下分享。
1,什么是序列化
序列化并非是JAVA领域的专有名词,而是计算机世界一个很常见的概念。但是,像计算机世界中的很多概念一样,序列化并没有一个很明确的定义。粗略描述的话,序列化具有以下特征。
① 序列化之前的对象通常是瞬时的,动态的,可变的;序列化之后的结果通常是持久的,静态的,不可变的。
② 序列化的目的通常是为了使得对象得以保存,或者传输。
③ 序列化过程通常有反序列化过程与之对应。
2,Java Serializable
Java Serializable说白了指的是Java 对象的序列化。指的是将Java 对象的元数据及其状态保存为二进制数组。在必要的时候可以通过解析该二进制数组,重新生成该对象并恢复其状态。这里着重说明一下什么是对象的状态。对象的状态实际上就是其成员变量的值,因此保存对象状态就是保存其对象的值。考虑一个最简单的Java对象:
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String str, int n) {
System.out.println("Inside Person's Constructor");
name = str;
age = n;
}
String getName() {
return name;
}
int getAge() {
return age;
}
}
对于某个对象,我们只要知道其元数据(类定义)+状态(name,age)
就可以相当于知道了该对象的所有细节,也意味着可以随时恢复该对象。
3,其他
咋一看,序列化貌似很简单,无非就是保存成员变量嘛。各位看官不要高兴的太早,实际上Java的序列化机制是非常复杂的。在本人看来,Java的序列化之所以不常用,其复杂性是一个很重要的原因。
从技术上讲,Java的serializable机制实际上是提供了以下两种技术途径。
① 实现了一种对象状态的保存和恢复方法。
② 实现了一种方法或者过程的远程调用方法。这一点可以与RMI或者RPC一起讨论。