⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serializecontrol.java

📁 本代码以J2SE 5.0为开发环境
💻 JAVA
字号:
package book.io;

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);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -