用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java 控制序列化 有选择地序列化对象(不是把所有对象的一切内容进行序列化)

2012-11-22 作者: 程序猿style举报

[java]代码库

import java.io.Externalizable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.Date;

/**
 * 控制序列化就是有选择的序列化对象,而不是把所有对象的一切内容进行序列化。
 * SerializeObject演示了使用transit关键字可以控制变量不被序列化。
 * 本程序将演示通过实现Externalizable接口控制对象的序列化和反序列化。
 */
public class SerializeControl {
	/**
	 * 内部类,用于测试控制对象的序列化和反序列化。
	 * 被序列化的对象必须实现Externalizable接口,该接口有2个方法:
     * writeExternal方法、readExternal方法。
     * 当序列化对象的时候,writeExternal方法会自动执行,所有的对象写入操作由该方法控制。
     * 反序列化对象的时候,readExternal方法会自动执行,如果想访问writeExternal写入的内容,
     * 也只能在该方法里编写恢复对象的代码。
	 */
	static class MyClassControl implements Externalizable{
	     int serialClassInt;
	     int a=3, b=4;
	     public MyClassControl(){
	         System.out.println("MyClass constructor!");
	         this.serialClassInt = 9;
	     }
	     
	     public void show(){
	         System.out.println("serialClassInt: " + serialClassInt);
	     }
	    //当序列化对象的时候,该方法自动被调用
	    public void writeExternal(ObjectOutput out) throws IOException{
	        System.out.println("run writeExternal");
	        //可以在序列化时写非自身的变量,
	        Date d = new Date();
	        out.writeObject(d);
	        //只序列化serialClassInt变量,a、b两个变量不被序列化
	        out.writeInt(this.serialClassInt);        
	    }
	    // 当反序列化对象的时候, 该方法自动被调用
		public void readExternal(ObjectInput in) throws IOException,
				ClassNotFoundException {
			System.out.println("run readExternal");
			Date d = (Date) in.readObject();
			System.out.println(d);
			this.serialClassInt = in.readInt();
		} 
	}
	/**
	 * 序列化对象
	 */
    public static void serializable(String fileName) throws Exception{
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName));
        MyClassControl my1 = new MyClassControl();
        out.writeObject(my1);
        out.close();        
    }
    /**
     * 反序列化
     */
    public static void deserializable(String fileName)throws Exception{
        ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));
        MyClassControl my2 = (MyClassControl)in.readObject();
        my2.show();
        in.close();
    }

	public static void main(String[] args) throws Exception{
		String fileName = "c:/temp/MyClassControl.ser";
		SerializeControl.serializable(fileName);
		SerializeControl.deserializable(fileName);
	}
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...