序列化与反序列化

 

	import java.io.ByteArrayInputStream;
	import java.io.ByteArrayOutputStream;
	import java.io.File;
	import java.io.FileInputStream;
	import java.io.FileOutputStream;
	import java.io.ObjectInputStream;
	import java.io.ObjectOutputStream;
	
	/** 
	 * @author 作者 FFish Zhang: 
	 * @version 创建时间:2012-12-5 上午11:13:12 
	 * 类说明 
	 */
	public class SerializationUtil {
		private static final String FILE_NAME="c:/obj.bin";
		public static void  writeObject(Object obj){
			try{
				if(obj==null)throw new NullPointerException();
				ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(new File(FILE_NAME)));
				out.writeObject(obj);
				out.flush();
				out.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		
		public static Object readObject(){
			Object o=null;
			try{
				ObjectInputStream in=new ObjectInputStream(new FileInputStream(new File(FILE_NAME)));
				o=in.readObject();
				in.close();
			}catch(Exception e){
				e.printStackTrace();
				
			}
			return o;
		}
	}
	 

 import java.io.IOException;

 

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;


public class Person implements Serializable{
	private static final long serialVersion=60407L;
	private String name;
	private Salary salary;
	public Person(String name,Salary salary){
		this.name=name;
		this.salary=salary;
	}
//	序列化委托方法 out在writeObject的时候回调该Serial是否含有一个writeObject方法
	private void writeObject(ObjectOutputStream out) throws IOException{
		out.defaultWriteObject();
		out.writeInt(salary.getBonus());
	}	
//	反序列化委托方法,,确保salary不被读取
	private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
		in.defaultReadObject();
		salary=new Salary(in.readInt(),100);
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Salary getSalary() {
		return salary;
	}
	public void setSalary(Salary salary) {
		this.salary = salary;
	}
	
	
}

 import java.io.Serializable;

public class Salary implements Serializable {
	private static final long serialVersionUid=44663L;
	private int baseSalary;
	private int bonus;
	public Salary(int baseSalary,int bonus)
	{
		this.baseSalary=baseSalary;
		this.bonus=bonus;
	}
	public int getBaseSalary() {
		return baseSalary;
	}
	public void setBaseSalary(int baseSalary) {
		this.baseSalary = baseSalary;
	}
	public int getBonus() {
		return bonus;
	}
	public void setBonus(int bonus) {
		this.bonus = bonus;
	}
}

 public class Serial {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Salary salary=new Salary(1000,2500);
		Person person=new Person("张飞",salary);
		SerializationUtil.writeObject(person);
	}

}

 /** 

 * @author 作者 FFish Zhang: 
 * @version 创建时间:2012-12-5 上午11:33:54 
 * 类说明 
 */
public class Deserizlize {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p=(Person) SerializationUtil.readObject();
		System.out.println("name:"+p.getName());
		System.out.println("basePay:"+p.getSalary().getBaseSalary());
		System.out.println("bonus:"+p.getSalary().getBonus());
	}

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值