Java序列化
package seria;
import java.io.IOException;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.ArrayList;
public class Person implements Serializable{
private String name;
private int age;
public Person(String name,int age){
System.out.println("有参数构造器");
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//自定义序列化需要提供如下特殊签名的方法
private void writeObject(java.io.ObjectOutputStream out)throws IOException
{
out.defaultWriteObject();
System.out.println(this.getAge()+"1");
out.writeObject((new StringBuffer(name)).reverse());//相当于加了一下密
this.age=6;
System.out.println(this.getAge()+"2");
out.writeInt(age);
System.out.println("writeObject");
}
private void readObject(java.io.ObjectInputStream in)throws IOException,ClassNotFoundException
{
in.defaultReadObject();
this.name=(String)in.readObject().toString();
this.age=(int)in.readInt();
System.out.println("readObject");
}
}
package seria;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class WriteObject {
public static void main(String[] args) throws Exception{
ObjectOutputStream ooStream=new ObjectOutputStream(new FileOutputStream("bojext2.txt"));
Person person=new Person("孙悟空", 500);
ooStream.writeObject(person);
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("bojext.txt"));
Person p=(Person)ois.readObject();
System.out.println((person==p));
System.out.println(p.getName()+p.getAge()+"Person类");
System.out.println(Thread.currentThread().getName());
}
}
为什么将readobject中的this.name=(String)in.readObject().toString();
this.age=(int)in.readInt();将这两句话注释掉,输出结果就不一样了。
不注释输出 , 空悟孙6Person类
注释后输出, 孙悟空500Person类