Java Serializable接口

本文介绍了Java中序列化的基本概念及其应用场景,包括RMI和JavaBeans。同时探讨了序列化与持久化之间的关系,以及如何通过序列化实现轻量级持久化。
序列化是把一个对象的状态写入一个字节流的过程
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);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值