问答详情
源自:6-2 transient及ArrayList源码分析

加transient过后,自己序列化和反序列化后得到的还是0?

public class Student implements Serializable{

private String stuno;

private String stnname;

private transient int stuage;//transient修饰的属性不会进行jvm默认的序列化,也可以自己完成序列化

public Student(){

}

@Override

public String toString() {

return "Student [stuno=" + stuno + ", stnname=" + stnname + ", stuage="

+ stuage + "]";

}


public Student(String stuno, String stnname, int stuage) {

super();

this.stuno = stuno;

this.stnname = stnname;

this.stuage = stuage;

}


public String getStuno() {

return stuno;

}

public void setStuno(String stuno) {

this.stuno = stuno;

}


public String getStnname() {

return stnname;

}

public void setStnname(String stnname) {

this.stnname = stnname;

}

public int getStuage() {

return stuage;

}

public void setStuage(int stuage) {

this.stuage = stuage;

}

private void WriteObject(java.io.ObjectOutputStream s)throws java.io.IOException{

s.defaultWriteObject();//把虚拟机能默认进行虚拟化的元素进行序列化操作

s.writeInt(stuage);//自己完成transient序列化修饰的属性

}

private void ReadObject(java.io.ObjectInputStream s)throws java.io.IOException, ClassNotFoundException{

s.defaultReadObject();

this.stuage=s.readInt();

}

}


import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;




public class ObjectSeriaDemo {


public static void main(String[] args)throws IOException, ClassNotFoundException{

String file="demo/obj.bat";

ObjectOutputStream oos=new ObjectOutputStream(

new FileOutputStream(file));

Student stu= new Student("1001","张三",20);

oos.writeObject(stu);

oos.flush();

oos.close();

ObjectInputStream ois=new ObjectInputStream(

new FileInputStream(file));

Student stu1=(Student)ois.readObject();

System.out.println(stu1);

ois.close();

}


}



提问者:慕粉2233466942 2016-12-26 19:26

个回答

  • A未来战士N
    2016-12-27 17:12:00
    已采纳

    WriteObject和ReadObject方法写错了,首字母应该小写