序列化的作用

没有implements Serializable,你就不能通过rmi(包括ejb)提供远程调用。 
      serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。 

	举个例子:
	网络传输的时候,可以传字符串,亦可以传对象object,例如socket,传字符串的时候接收方很容易解析出来,但是,传一个对象的时候,对方读完字节流后,不知道你传的什么对象,所以没办法给转成原来的对象并解析对象的属性,这时候就要用到序列化和反序列化。
类实现序列化接口,socket发送这个对象的字节流,接收方到流后就可以将流反序列化成对象,然后使用对象的方法和属性。

      serialization不但可以在本机做,而且可以经由网络操作(就是猫小说的RMI)。这个好处是很大的----因为它自动屏蔽了操作系统的差异,字节顺序等。比如,在Window平台生成一个对象并序列化之,然后通过网络传到一台Unix机器上,然后可以在这台Unix机器上正确地重构这个对象。 
Object serialization主要用来支持2种主要的特性: 
     1.Java的RMI(remote method invocation).RMI允许象在本机上一样操作远程机器上的对象。当发送消息给远程对象时,就需要用到serializaiton机制来发送参数和接收返回直。 
      2.Java的JavaBeans. Bean的状态信息通常是在设计时配置的。Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息。这也需要serializaiton机制。

    下面是关于serializable的一个例子,如果MyClass不实现serializable,程序将抛出异常。

 

Java代码  复制代码
[c-sharp]  view plain copy
  1. import java.io.*;     
  2.     
  3. public class SerializationDemo{     
  4.         public static void main(String args[]){     
  5. // serialization     
  6.     try{     
  7.     MyClass object1=new MyClass("Hello",-7,2.7e10);     
  8.     System.out.println("object1:"+object1);     
  9.     FileOutputStream fos=new FileOutputStream("serial");     
  10.     ObjectOutputStream oos=new ObjectOutputStream(fos);     
  11.     oos.writeObject(object1);     
  12.     oos.flush();     
  13.     oos.close();     
  14.     }catch(Exception e){     
  15.             System.out.println("Exception during serialization:"+e);     
  16.             System.exit(0);     
  17.     }     
  18. // deserialization     
  19.     try{     
  20.     MyClass object2;     
  21.     FileInputStream fis=new FileInputStream("serial");     
  22.     ObjectInputStream ois=new ObjectInputStream(fis);     
  23.     object2=(MyClass)ois.readObject();     
  24.     ois.close();     
  25.     System.out.println("object2:"+object2);     
  26.     }catch(Exception e){     
  27.         System.out.println("Exception during deserialization:"+e);     
  28.         System.exit(0);     
  29.     }     
  30.     }     
  31. }     
  1.   
  2. ------MyClass.java   
  3.   
  4. [java]  view plain copy
    1. class MyClass implements Serializable{     
    2.     String s;     
    3.     int i;     
    4.     double d;     
    5.     public MyClass(String s,int i,double d){     
    6.         this.s=s;     
    7.         this.i=i;     
    8.         this.d=d;     
    9.     }     
    10.     public String toString(){     
    11.         return "s="+s+";i="+i+";d="+d;     
    12.     }     
    13. }     
    14.     
[java]  view plain copy
  1. <span style="font-size: medium;"><span style="font-size: small;">  
  2.   
  3. </span></span>  

 如果不需要序列化属性就注释为translent
总之如果在网络的环境下做类传输,应该还是应该implements Serializable.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值