1、所谓序列化:简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
2、其用途:
 a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
     b)当你想用套接字在网络上传送对象的时候;
     c)当你想通过RMI传输对象的时候;
3、对象实现序列化:
总所周知,对象保存在堆中。而每一个保存在队中的对象都有相应的状态,这即是:实力变量。
看一下这几句代码:
Frame myFrame = new Frame();
myFrame.setSize(100,100);
mysFrame.setColor(Color.blue);
档上面的代码被序列化后,myFrame对象中的size和color实例变量都被赋值,其被保存在Frame.ser文件中,这样以后,就可以把他从文件中读出来,重新在堆中创建原来的对象,除此之外,jvm还会保留一些对象的小量信息(如类的类型、关键字等)
4、实现一个Serializable:
FileOutputStream fos = new FileOutputStream(Frame.ser);
ObjectOutputStream ops = new ObjectOutputStream(fos);
ops.writeObject(myFrame);
下面是一个网络通信实例项目的原代码:
//================Information.java================public class Information implements Serializable {

public int type;//信息类型
public String source;//信息来源
public Object content;//信息内容
public static final int ENTER=1;//加入类型
public static final int EXIT=2;//退出类型
public static final int MESSAGE=3;//消息类型
public static final int FILE=4;
public static final int VOICE=5;
/**
 * Method Information
 * 构造方法
 * param type 信息类型,可以是ENTER、EXIT、MESSAGE三种类型
 * param source 信息来源
 * param cotent 信息内容,必须是被序列化了的对象
 */
public Information(int type,String source,Object content) {

this.type=type;
this.source=source;
this.content=content;
}
}
//================send.java=====================
public class Sender extends Thread { private BlockingQueue queue;
private ObjectOutputStream out; /**
 * Method SendService
 */
public Sender(Socket socket,BlockingQueue queue) 
throws java.io.IOException {
this.queue=queue;
out=new ObjectOutputStream(socket.getOutputStream());
} /**
 * Method run
 *
 *
 */
public void run(){
while(true){
try{
Object object=queue.take();
out.writeObject(object);
}catch(InterruptedException e){
System.err.println(e.getMessage());
}catch(java.io.IOException e){
break;
}
}
}
}
//========================================
需要注意的是:
  a)序列化时,只对对象的状态进行保存,而不管对象的方法;
     b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
     c)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
     d)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了。