Java序列化之一: 什么是JAVA序列化

这几天受领导委托,做了一个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一起讨论。

你可能感兴趣的:(java,Serializable)