Serializable接口

百度百科:

public interface Serializable类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
JDK:

The   writeObject   method   is   responsible   for   writing   the   state   of   the   object   for   its   particular   class   so   that   the   corresponding   readObject   method   can   restore   it.   The   default   mechanism   for   saving   the   Object's   fields   can   be   invoked   by   calling   out.defaultWriteObject.   The   method   does   not   need   to   concern   itself   with   the   state   belonging   to   its   superclasses   or   subclasses.   State   is   saved   by   writing   the   individual   fields   to   the   ObjectOutputStream   using   the   writeObject   method   or   by   using   the   methods   for   primitive   data   types   supported   by   DataOutput.    
   
  The   readObject   method   is   responsible   for   reading   from   the   stream   and   restoring   the   classes   fields.   It   may   call   in.defaultReadObject   to   invoke   the   default   mechanism   for   restoring   the   object's   non-static   and   non-transient   fields.   The   defaultReadObject   method   uses   information   in   the   stream   to   assign   the   fields   of   the   object   saved   in   the   stream   with   the   correspondingly   named   fields   in   the   current   object.   This   handles   the   case   when   the   class   has   evolved   to   add   new   fields.   The   method   does   not   need   to   concern   itself   with   the   state   belonging   to   its   superclasses   or   subclasses.   State   is   saved   by   writing   the   individual   fields   to   the   ObjectOutputStream   using   the   writeObject   method   or   by   using   the   methods   for   primitive   data   types   supported   by   DataOutput.  

                      

Object serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。 

serialization不但可以在本机做,而且可以经由网络操作(RMI)。它自动屏蔽了操作系统的差异,字节顺序等。比如,在Window平台生成一个对象并序列化之,然后通过网络传到一台Unix机器上,然后可以在这台Unix机器上正确地重构这个对象。


Object serialization主要用来支持2种主要的特性:
1。Java的RMI(remote method invocation).RMI允许象在本机上一样操作远程机器上的对象。当发送消息给远程对象时,就需要用到serializaiton机制来发送参数和接收返回直。

2。Java的JavaBeans.   Bean的状态信息通常是在设计时配置的。Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息。这也需要serializaiton机制。

Java语言里现在支持lightweight persistence,就是轻量级持久化,这是通过serialization机制来实现的。persistence是指一个对象的生命周期不由程序是否执行来决定,即使是在程序终止时这个对象也存在。它把一个serializable的对象写到磁盘(本机或其他机器上的非RAM存储器),并在程序重新调用时再读取对象到通常的RAM存储器。之所以称之为轻量级,是因为必须显式的序列化和反序列化程序里的对象;而不是直接由一个关键词来定义一个对象是序列化的然后由系统做相应的处理。

一个不错的例子:

import java.io.*;



public class SerializationDemo{

        public static void main(String args[]){
//Object serialization

try{

        MyClass object1=new MyClass("Hello",-7,2.7e10);
        System.out.println("object1:"+object1);

        FileOutputStream fos=new FileOutputStream("serial");

        ObjectOutputStream oos=new ObjectOutputStream(fos);

        oos.writeObject(object1);

        oos.flush();

        oos.close();

}

catch(Exception e){

         System.out.println("Exception during serialization:"+e);

         System.exit(0);

}



//Object deserialization

try{

MyClass object2;

FileInputStream fis=new FileInputStream("serial");

ObjectInputStream ois=new ObjectInputStream(fis);

object2=(MyClass)ois.readObject();

ois.close();

System.out.println("object2:"+object2);

}

catch(Exception e){

System.out.println("Exception during deserialization:"+e);

System.exit(0);

}

}

}



class MyClass implements Serializable{

String s;

int i;

double d;

public MyClass(String s,int i,double d){

this.s=s;

this.i=i;

this.d=d;

}

public String toString(){

return "s="+s+";i="+i+";d="+d;

}

}



程序运行结果:object1和object2的实例变量是一样的,输出如下:

object1:s=Hello;i=-7;d=2.7E10

object2:s=Hello;i=-7;d=2.7E10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值