序列化作用

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

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

 

 

序列化作用       

1982人阅读 评论(0) 收藏 举报

没有implements Serializable,你就不能通过rmi(包括ejb)提供远程调用。
      serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。
      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 print ?
  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.  
    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.    
  1. <span style="font-size: medium;"><span style="font-size: small;"
  2.  
  3. </span></span> 
<span style="font-size:14px;"><span style="font-size:12px;">

</span></span>

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值