Java 对象序列化
有的时候需要在程序不运行时将对象的信息保存下来,在下次运行程序使,利用保存的信息重建改对象。
Java的对象序列化可以将实现了Serializable接口的对象保存为字节序列,并能够将这些字节序列恢复为原来的对象。
序列化的需要实现Serializable接口(该接口是一个标记接口)。
class Data implements Serializable{
private int n;
public Data(int n) {
this.n = n;
}
@Override
public String toString() {
return n + "";
}
}
public class Worm implements Serializable{
private static Random rand = new Random(47);
private Data[] d = {
new Data(rand.nextInt(10)),
new Data(rand.nextInt(10)),
new Data(rand.nextInt(10))
};
private Worm next;
private char c;
public Worm(int i, char x){
System.out.println("Worm constructor: " + i);
c = x;
if (--i > 0){
next = new Worm(i,(char)(x + i));
}
}
public Worm(){
System.out.println("Default constructor");
}
@Override
public String toString() {
StringBuilder result = new StringBuilder("\n:");
result.append(c);
result.append("(");
for (Data d :
d) {
result.append(d);
}
result.append(")");
if (next != null)
result.append(next);
return result.toString();
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
Worm w = new Worm(6,'a');
System.out.println("w = " + w);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("worm.out"));
out.writeObject("Worm storage\n");
out.writeObject(w);
ObjectInputStream in = new ObjectInputStream(new FileInputStream("worm.out"));
String s = (String) in.readObject();
Worm w2 = (Worm) in.readObject();
System.out.println("w2 = " + w2);
}
}