`
四眼蛤蟆
  • 浏览: 97737 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java序列化和反序列化

    博客分类:
  • Java
阅读更多

序列化是把一个对象的状态写入一个字节流的过程,它执行RMI,RMI允许一台机器上的JAVA对象调用不同机器上的JAVA对象方法,对象可以作为参数提供给那个远程方法,发送机序列化该对象并传送它,接收机执行反序列化。 
序列化和反序列化的关系图表可形成包含循环引用的顺序图表。这是整个序列化的总体思想。 
而Serializable接口属于支持序列化的一个接口,只有一个实现它的对象可以被序列化工具存储和回复,Serializable接口没有定义任何成员,只用来表示一个累可以被序列化,若该类可以序列化,那么它的所有子类都可以。 
下面是关于序列化的一个实例: 
程序名称:SerializationDemo.java 
程序主题:实现对象的序列化和反序列化 
程序说明:该程序由实例化一个MyClass类的对象开始,该对象有三个实例变量,类型分别为String、int、double,是希望存储和恢复的信息。
 

 

 

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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics