您的位置:首页 > 编程语言 > Java开发

Java 对象序列化控制

2013-02-16 19:21 225 查看
序列化的控制主要有三种方式:

实现Externalizable接口;
实现Serializable接口 + transient修饰符;
实现Externalizable接口的替代方案:实现Serializable + 添加方法;

1、实现Externalizable接口:

对于一个Externalizable对象而言,在序列化和反序列化中需要调用默认的构造函数,所以需要注意默认构造函数的访问控制符是否得当!

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;

public class Blip3
implements Externalizable {
private int i;
private String s; // No initialization

public Blip3() {
System.out.println("Blip3 Constructor");
// s, i not initialized
}

public Blip3(String x, int a) {

System.out.println("Blip3(String x, int a)");
s = x;
i = a;
// s & i initialized only in non-default constructor.

}

public String toString() {
return s + i;
}

public void writeExternal(ObjectOutput out)
throws IOException {
System.out.println("Blip3.writeExternal");
// You must do this:
out.writeObject(s);
out.writeInt(i);
}

public void readExternal(ObjectInput in)
throws IOException,
ClassNotFoundException {
System.out.println("Blip3.readExternal");
// You must do this:
s = (String) in.readObject();
i = in.readInt();
}

public static
void main(String[] args) throws IOException,
ClassNotFoundException {
System.out.println("Constructing objects:");
Blip3 b3 = new Blip3("A String ",
47);
System.out.println(b3);
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream(

"Blip3.out"));
System.out.println("Saving object:");
o.writeObject(b3);
o.close();
// Now get it back:
ObjectInputStream in = new ObjectInputStream(new FileInputStream(

"Blip3.out"));
System.out.println("Recovering b3:");
b3 = (Blip3) in.readObject();
System.out.println(b3);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: