J2EE社区

苟有恒,何必三更起五更眠;
最无益,只怕一日曝十日寒.
posts - 241, comments - 318, trackbacks - 0, articles - 16

java中的Serializable接口的作用

Posted on 2008-08-12 22:53 xcp 阅读(3638) 评论(1)  编辑  收藏 所属分类: JAVA

 

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

serialization不但可以在本机做,而且可以经由网络操作(RMI)。这个好处是很大的----因为它自动屏蔽了操作系统的差异,字节顺序(用Unix下的c开发过网络编程的人应该知道这个概念)等。比如,在Window平台生成一个对象并序列化之,然后通过网络传到一台Unix机器上,然后可以在这台Unix机器上正确地重构这个对象。


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

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



二。sakulagi和rollingpig说的持久化我也说一下。
我觉得你们说的应该是英文里的persistence.但是Java语言里现在只支持lightweight persistence,就是轻量级持久化,这是通过serialization机制来实现的。

persistence是指一个对象的生命周期不由程序是否执行来决定,即使是在程序终止时这个对象也存在。它把一个serializable的对象写到磁盘(本机或其他机器上的非RAM存储器),并在程序重新调用时再读取对象到通常的RAM存储器。

为什么说Java的serialization机制实现的是lightweight persistence?因为你必须显式的序列化和反序列化程序里的对象;而不是直接由一个关键词来定义一个对象是序列化的然后由系统做相应的处理。


下面是关于序列化的一个实例:

程序名称:SerializationDemo.java
程序主题:实现对象的序列化和反序列化
程序说明:该程序由实例化一个MyClass类的对象开始,该对象有三个实例变量,类型分别为String、int、double,是希望存储和恢复的信息。

代码内容
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的实例变量是一样的,输出如下:[code:1:a55efb5f91]object1:s=Hello;i=-7;d=2.7E10
object2:s=Hello;i=-7;d=2.7E10



名称: ♪4C.ESL | .↗Evon
口号: 遇到新问题♪先要寻找一个方案乄而不是创造一个方案こ
mail: 联系我


Feedback

# re: java中的Serializable接口的作用   回复  更多评论   

2013-07-03 09:19 by www.dsprint.cn(武汉印刷)
学习了~

只有注册用户登录后才能发表评论。


网站导航: