一、对象序列化,面向那些实现了Serializable接口的对象,可将他们西黄换成一系列字节,并可在以后完全恢复回原来的样子,这一过程也可以在网络上进行,这意味着序列化机制能自动补偿操作系统之间的差异。
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Data implements Serializable{
private int i;
Data(int x){
i = x;
}
public String toString(){
return Integer.toString(i);
}
}
public class Worm implements Serializable{
private static int r(){
return (int)(Math.random()*10);
}
private Data[] d = {
new Data(r()),new Data(r()),new Data(r())
};
private Worm next;
private char c;
Worm(int i, char x){
System.out.println("Worm Constructor : " + i);
c = x;
if(--i > 0){
next = new Worm(i, (char)(x+1));
}
}
Worm() {
System.out.println("Default constructor");
}
public String toString(){
String s = ":" + c + "(";
for(int i=0; i<d.length; i++){
s += d[i].toString();
}
s += ")";
if(next != null){
s += next.toString();
}
return s;
}
public static void main(String[] args) {
Worm w = new Worm(6, 'a');
System.out.println("w = " + w);
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("worm.out"));
out.writeObject("Worm storage");
out.writeObject(w);
out.close();
ObjectInputStream in = new ObjectInputStream(new FileInputStream("worm.out"));
String s = (String)in.readObject();
Worm w2 = (Worm)in.readObject();
System.out.println(s + " , w2 = " + w2);
} catch (Exception e) {
e.printStackTrace();
}
try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout);
out.writeObject("Worm storage");
out.writeObject(w);
out.flush();
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray()));
String s = (String)in.readObject();
Worm w3 = (Worm)in.readObject();
System.out.println(s + " , w3 = " + w3);
} catch (Exception e) {
e.printStackTrace();
}
}
}
结果:
Worm Constructor : 6
Worm Constructor : 5
Worm Constructor : 4
Worm Constructor : 3
Worm Constructor : 2
Worm Constructor : 1
w = :a(064):b(601):c(149):d(935):e(240):f(183)
Worm storage , w2 = :a(064):b(601):c(149):d(935):e(240):f(183)
Worm storage , w3 = :a(064):b(601):c(149):d(935):e(240):f(183)