当两个Java进程在网络通信时,一个进程可以通过把Java对象转换为字序列,使其在网络上传送,在接收方则需要把字节序列再恢复为Java对象。对象的序列化主要有两种用途
	1.把对象的字节序列永久地保存在硬盘,通常存放在一个文件中。
2.在网絽上传送对象的字节序列。
	        只有实现了Serializable或Extenalizable接口的类对象才能被序列化。其中Extenalizable接口继承Serializabler接口,实现Extenalizable接口完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以采用默认的序列化方式。
        如果一个类实现Extenalizable接口,则它必须实现readExtenal(ObjectInput
in)和writeExtenal(ObjectOutput
out)方法,并且在readExtenal中会先调用类的不带参数的构造方法,所以类必须提供一个不带参数的构造方法。而在实现Serializable接口的类中,它不用调用类的任何构造方法。对于实现Serializable的类,可以通过实现private
void read/writeObject()来改变默认的序列化方式。
        对于单例类要实现序列化时,为了使反序列化能够得到正确的结果,需要在类增加一个readResole()方法。
        transient显式声明不对它序列化.
	        serialVersionUID用来表示可序列化类的不同版本的序列化兼容性。	
                  JavaSE中的Preferences
API也提供了对象的持久性。Thinking
in java中给出一个简单的例子。
       下面给出一个简单的序列化例子:
            
import java.io.*;
public class Customer implements Serializable {
    private int age;
    public Customer(int age ){
        this.age = age;
    }
    public String toString(){
        return "age="+age;
    }
    public static void main(String[] args)throws Exception{
        Customer custormer = new Customer(24);
        System.out.println("before Serializable: "+custormer);
        ByteArrayOutputStream buf = new ByteArrayOutputStream();
        ObjectOutputStream o = new ObjectOutputStream(buf);
        o.writeObject(custormer);
        byte[] byteArray = buf.toByteArray();
        
        ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(byteArray));
        custormer = (Customer)in.readObject();
        System.out.println("After Serializable:"+custormer);
    }
}