序列化是把一个对象的状态写入一个字节流的过程
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机制。
二。持久化
我觉得你们说的应该是英文里的persistence.但是Java语言里现在只支持lightweight?persistence,就是轻量级持久化,这是通过serialization机制来实现的。?
persistence是指一个对象的生命周期不由程序是否执行来决定,即使是在程序终止时这个对象也存在。它把一个serializable的对象写到磁盘(本机或其他机器上的非RAM存储器),并在程序重新调用时再读取对象到通常的RAM存储器。?
为
什么说Java的serialization机制实现的是lightweight?persistence?因为你必须显式的序列化和反序列化程序里的对
象;而不是直接由一个关键词来定义一个对象是序列化的然后由系统做相应的处理。??如果以后的Java版本出现一个新的关键字来实现这种机制,比如就是
persistence,如果我用?
persistence??(String?s="chinaunix")?
然后系统自动做猫小程序里的那些处理,那么Java就实现了persistence.?
它执行RMI,RMI允许一台机器上的JAVA对象调用不同机器上的JAVA对象方法,对象可以作为参数提供给那个远程方法,发送机序列化该对象并传送它,接收机执行反序列化。?
序列化和反序列化的关系图表可形成包含循环引用的顺序图表。这是整个序列化的总体思想。?
而Serializable接口属于支持序列化的一个接口,只有一个实现它的对象可以被序列化工具存储和回复,Serializable接口没有定义任何成员,只用来表示一个类可以被序列化,若该类可以序列化,那么它的所有子类都可以。?
下面是关于序列化的一个实例:?
package cn.itwoody.serialization;
import java.io.Serializable;
public class MyClass implements Serializable {
???
??? private
static final long serialVersionUID = 1L;
???
??? 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;
??? }
???
}
package cn.itwoody.serialization;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerializationDemo {
???
??? public
static void main(String[] args) throws IOException,
ClassNotFoundException {
???
??? MyClass
object1=new MyClass("Hello",-7,2.7e10);
???
???
System.out.println("object1:"+object1);
???
???
FileOutputStream fos=new FileOutputStream("serial.txt");
???
???
ObjectOutputStream oos=new ObjectOutputStream(fos);
???
???
oos.writeObject(object1);
???
???
oos.flush();
???
???
oos.close();
???
??? MyClass
object2;
???
???
FileInputStream fis=new FileInputStream("serial.txt");
???
???
ObjectInputStream ois=new ObjectInputStream(fis);
???
???
object2=(MyClass) ois.readObject();
???
???
ois.close();
???
???
System.out.println("object2:"+object2);
??? }
}
分享到:
相关推荐
Java对象Serializable接口实现详解 Java中的Serializable接口是java.io包中定义的,用于实现Java类的序列化操作而提供的一个语义级别的接口。Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的...
Java 中的 Serializable 接口作用详解 Java 中的 Serializable 接口是一个非常重要的接口,它允许对象被序列化,换句话说,就是将对象转换成字节序列,以便于存储或通过网络传输。Serializable 接口的作用主要体现...
`Serializable`接口是Java提供的一个标记接口,用于实现对象的序列化。当一个类实现了这个接口,它的实例就可以被序列化。 **一、Java序列化** 1. **什么是序列化**:序列化是将对象的状态(属性和成员变量)转换...
Serializable接口的作用 在 Java 中,Serializable 接口扮演着非常重要的角色,它允许对象被序列化和反序列化,实现对象的持久化存储和网络传输。本文将详细介绍 Serializable 接口的作用和实现原理,以及它在 Java...
在Java中,如果一个类实现了`Serializable`接口,那么该类的对象就可以被序列化。序列化的目的是为了能够持久地保存对象的状态,或者在网络中传递对象。 序列化主要关注的是对象的状态(即其实例变量),而不是其...
1. `java.io.Serializable`: 使类的对象能够进行序列化,用于持久化数据或在网络中传输。 2. `java.lang.Cloneable`: 标记接口,表示对象可以被克隆。 3. `java.lang.Runnable`: 实现此接口的类可以作为线程执行的...
在Java编程语言中,`Serializable`接口是一个非常重要的概念,它是实现对象持久化的关键。本文将深入探讨`Serializable`接口的细节,以及与其相关的高级知识。 `Serializable`接口是Java中的一个标记接口,没有包含...
序列化的核心接口是 `java.io.Serializable`,它是一个标记接口,没有定义任何方法,用于标记可以被序列化的类。 #### 二、实现序列化的方法 为了使一个类支持序列化,需要让该类实现 `Serializable` 接口。实现这...
本教程将详细讲解如何通过Serializable接口来实现Intent对象的传递。 首先,了解Serializable接口。在Java中,Serializable是用于序列化和反序列化的接口。当一个类实现了这个接口,它的实例就可以被转化为一串字节...
4. **Java Serializable接口**:自定义类需要实现Serializable接口,以便能够被序列化和反序列化。 5. **XMLBeans或JAXB**:Apache Axis可以使用XMLBeans或JAXB(Java Architecture for XML Binding)进行对象到XML...
Java中,我们可以使用Java Serializable接口来标记一个类是可序列化的。序列化不仅可以用于网络传输,还可以用于持久化存储,便于恢复对象状态。例如,客户端发送的消息对象会被序列化成字节流,然后通过网络发送到...
在Java中,如果一个类需要支持序列化,那么该类需要实现`java.io.Serializable`接口,虽然这个接口没有定义任何方法,但是它的存在作为一个标记,表明该类的对象可以被序列化。 序列化的优点主要有以下几点: 1. **...
在实际项目中,接口常用于定义服务合同,如`java.util.Comparator`或`java.io.Serializable`。这些接口规定了对象如何与其他对象交互,而无需关心具体实现的细节。 此外,Java 8还引入了静态接口方法,它们属于接口...
在Java中,通过实现`Serializable`接口,可以方便地进行对象的序列化操作。序列化的核心在于能够将对象的状态转换为可以存储或传输的形式,从而实现对象的持久化和远程通信等功能。 #### 二、序列化的应用场景 ...
5. **注释和序列化支持**:为了提高代码可读性和与其他框架的兼容性,生成的实体类可能还包括JPA的注解(如@Entity、@Id等)和Java Serializable接口。 6. **文件输出**:最后,工具将生成的实体类代码保存到指定的...
在Java编程中,`Serializable`接口是用于对象序列化的重要工具。对象序列化是指将一个对象的状态转换为字节流的过程,以便存储或通过网络进行传输。另一方面,`Stream`通常指的是I/O流,它是Java处理输入/输出数据的...
**一、Serializable接口** `Serializable`是Java中的一个标记接口,没有包含任何方法。当一个类实现这个接口时,表明该类的对象可以被序列化。Java的序列化机制会遍历对象的所有字段,并将它们的值写入字节流。需要...
1. **Serializable接口** `Serializable` 是Java标准库提供的一种简单的序列化方式,位于`java.io`包下。任何实现了`Serializable`接口的类,其对象都可以被序列化。实现这个接口不需要实现任何方法,只需要在类...
一种是实现Serializable接口 另一种是实现Externalizable接口 区别: 实现Serializable接口 1 系统自动储存必要的信息 2 Java内建支持,易于实现,只需实现该接口即可,无须任何代码支持 3 性能略差 实现...