序列化是把一个对象的状态写入一个字节流的过程,它执行RMI,RMI允许一台机器上的JAVA对象调用不同机器上的JAVA对象方法,对象可以作为参数提供给那个远程方法,发送机序列化该对象并传送它,接收机执行反序列化。
序列化和反序列化的关系图表可形成包含循环引用的顺序图表。这是整个序列化的总体思想。
而Serializable接口属于支持序列化的一个接口,只有一个实现它的对象可以被序列化工具存储和回复,Serializable接口没有定义任何成员,只用来表示一个累可以被序列化,若该类可以序列化,那么它的所有子类都可以。
下面是关于序列化的一个实例:
程序名称: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的实例变量是一样的,输出如下:
object1:s=Hello;i=-7;d=2.7E10
object2:s=Hello;i=-7;d=2.7E10
----------------------------------------------------------------------------------------------
现在知道是怎么回事了-----Thank Bruce Eckel a million times for his excellent <<Think in java(Second Edition) >;>;.书里面讲的好清楚啊。
一。猫小写的不大全,可能是因为我的帖子里写的“一般在什么情况下用”这话作怪。
我补充一下:
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?因为你必须显式的序列化和反序列化程序里的对象;而不是直接由一个关键词来定义一个对象是序列化的然后由系统做相应的处理。 如果以后的Java版本出现一个新的关键字来实现这种机制,比如就是persistence,如果我用
persistence (String s="chinaunix")
然后系统自动做猫小程序里的那些处理,那么Java就实现了persistence.
第一次写这么多,而且是刚看了书不久写的,错误和行文不当之处多包涵。
分享到:
相关推荐
Java对象Serializable接口实现详解 Java中的Serializable接口是java.io包中定义的,用于实现Java类的序列化操作而提供的一个语义级别的接口。Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的...
Java 中的 Serializable 接口作用详解 Java 中的 Serializable 接口是一个非常重要的接口,它允许对象被序列化,换句话说,就是将对象转换成字节序列,以便于存储或通过网络传输。Serializable 接口的作用主要体现...
android Activity之间数据传递 Parcelable和Serializable接口的使用的具体实例代码,详情请看>http://blog.csdn.net/js931178805/article/details/8268144
Serializable接口的作用 在 Java 中,Serializable 接口扮演着非常重要的角色,它允许对象被序列化和反序列化,实现对象的持久化存储和网络传输。本文将详细介绍 Serializable 接口的作用和实现原理,以及它在 Java...
本教程将详细讲解如何通过Serializable接口来实现Intent对象的传递。 首先,了解Serializable接口。在Java中,Serializable是用于序列化和反序列化的接口。当一个类实现了这个接口,它的实例就可以被转化为一串字节...
在Android开发中,Serializable接口是实现对象序列化的重要方式,它是Java平台标准的一部分,但在Android环境中也有广泛的应用。本文将深入探讨Android中的Serializable序列化机制,包括其原理、使用场景以及注意...
3. 对于Serializable,`putSerializable()`和`getSerializable()`可以处理任何实现了Serializable接口的对象,包括ArrayList或其他集合类。 4. 不同的数据类型必须使用对应的方法进行传递,不能混淆使用。 5. 传递后...
面试官:“说一下Serializable接口和Parcelable接口的区别吧。” 我们可以从以下两方面来说一说~ 首先我们先给两者来个简单的介绍: 1.定义 Serializable(Java自带): Serializable是序列化的意思,表示将一个对象...
1. **实现Serializable接口**:首先,你需要让你的对象类实现Serializable接口,例如: ```java public class MyObject implements Serializable { // 类的属性 } ``` 2. **放入Intent**:然后,你可以将这个对象...
只需让类实现Serializable接口,系统就会自动处理序列化和反序列化。使用`writeObject()`和`readObject()`方法可以自定义序列化的行为。 优点: - 实现简单,只需要在类上添加`implements Serializable`即可。 - ...
在Java编程语言中,`Serializable`接口是一个非常重要的概念,它是实现对象持久化的关键。本文将深入探讨`Serializable`接口的细节,以及与其相关的高级知识。 `Serializable`接口是Java中的一个标记接口,没有包含...
要序列化的对象应该实现Serializable接口。 Serializable接口是一个标识接口,没有抽象方法。 Serializable有一个子接口Externalizable,实现Externalizable接口的类可以自行控制对象序列化荷反序列化过程。 ...
一种是实现Serializable接口 另一种是实现Externalizable接口 区别: 实现Serializable接口 1 系统自动储存必要的信息 2 Java内建支持,易于实现,只需实现该接口即可,无须任何代码支持 3 性能略差 实现...
Serializable接口包含两个抽象方法:serialize() 和 unserialize()。实现Serializable接口的类必须实现这两个方法,分别用于自定义对象的序列化和反序列化过程。具体来说,当对象需要被序列化时,PHP会自动调用对象...
实现Serializable接口的类会被自动处理,无需编写额外的序列化代码,但效率相对较低。 1. 在需要序列化的类上添加`implements Serializable`:这样,Java会自动生成序列化所需的元数据,如serialVersionUID。 2. ...
1. **Serializable接口** `Serializable`是Java提供的标准序列化接口,无需实现任何方法,只需在类上添加`implements Serializable`即可。对象序列化后可以写入文件或网络流。然而,`Serializable`效率较低,因为它...
**一、Serializable接口** `Serializable`是Java中的一个标记接口,没有包含任何方法。当一个类实现这个接口时,表明该类的对象可以被序列化。Java的序列化机制会遍历对象的所有字段,并将它们的值写入字节流。需要...
Serializable 接口是一个标记接口,表明该类可以被序列化。实现了 Serializable 接口的类需要提供一个称为 serialVersionUID 的静态final变量,该变量用于标识类的版本。 serialVersionUID serialVersionUID 是一...
当我们需要在Intent中传递自定义对象时,Android提供了几种方式来实现这一功能,其中一种常用的方法是将自定义对象转换为Serializable接口的实现。以下我们将详细探讨如何通过Intent传递自定义对象以及涉及到的相关...