java,序列化与对象克隆

写这一个是因为如果类的成员变量比较复杂,那么使用clone()方法显然不是很好

于是我们考虑了一下使用序列化对象,下面简单的讲解一下什么叫序列化对象

一种处理对象流的机制,对象流即将对象的内容流化,让对象可以进行读写操作

序列化是为了解决对象在进行读写操作是产生的问题

序列化的实现

    被序列化的类需要继承Serializable接口,该接口没有实现方法,实现该节口只是为

了标记该对象可以被序列化

   序列化简单的说是把java对象存储在某个地方,以便于传输

   下面是有关代码的实现

首先是创建一个Love类

import java.io.Serializable;

public class Love implements Serializable{
	public String people;
	public int number;
	
	public Love (String people,int number)
	{
		this.people=people;
		this.number=number;
	}
	
	
	public String getPeople() {
		return people;
	}
	public void setPeople(String people) {
		this.people = people;
	}
	public int getNumber() {
		return number;
	}
	public void setNumber(int number) {
		this.number = number;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return people+"-----"+number;
	}
}

然后是创建一个Employer 类

import java.io.Serializable;

public class Employer implements Serializable{
     private String name;
     private int age;
     private Love love;
     public Employer(String name,int age,Love love)
     {
    	 this.name=name;
    	 this.age=age;
    	 this.love=love;
     }
	public Love getLove() {
		return love;
	}
	public void setLove(Love love) {
		this.love = love;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return name+"-------"+age+"-----"+love;
	}
}

最后创建Demo这个测试类
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Love love= new Love("刘美女",23);
        Employer e1=new Employer("雇主1",38,love);
        System.out.println("输出雇主信息");
        System.out.println(e1);
        System.out.println("序列化之后");
        ObjectOutputStream oos=null;
        ObjectInputStream ois=null;
        Employer e2=null;
        try {
			oos=new ObjectOutputStream(new FileOutputStream("employer.bat"));  //创建输出流
			ois=new ObjectInputStream(new FileInputStream("employer.bat"));   //创建输入流
			//写入对象到employer.bat中
			oos.writeObject(e1);
			
			//读出employer.bat文件中的对象
			e2=(Employer) ois.readObject();
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        finally{
        	if(oos!=null)
        	{
        		try {
					oos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
        	}
        	if(ois!=null)
        	{
        		try {
					ois.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
        	}
        }
        
        if(e2!=null)
        {
        	//对e2的内容进行修改
        	e2.setAge(29);
        	e2.setName("雇主2");
        	e2.getLove().setNumber(18);
        	e2.getLove().setPeople("迪美女");
           System.out.println("输出e2对象的内容");
           System.out.println(e2);
           System.out.println("-------");
           System.out.println("输出e1对象的内容");
           System.out.println(e1);
        }
	}

}


需要留意的是你也可以将对象写入到内存中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值