---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
1.序列化与反序列化是干什么的 都用哪些类处理
正常对象是保存在堆中的但你程序用完对象就结束了 但你还想用怎么办 你可以把对象持久化(就是保存在硬盘上) 处理类是ObjectInputStream与 OjbectOutputStream
2.当你序列化一个对象 但当你改变对象 就不能反序列化了
其实jvm是根据 static final long serialVersionUID = 42L; 这个字段是否相同来决定是否能反序列化的 这个字段又是系统生成的 如果你想
做到即使是改变对象也能序列化 就要自己生成serialVersionUID
3.什么属性不能序列化
static 属性不能 因为static 是方法区的 而序列化只能是堆中的数据 所以不能序列化
还有就是 ransient int age 也是不能序列化的因为有transient关键字
代码实例
public class ObjectInputStream {
public static void main(String[] args) throws Exception {
writeObj();
readerObj();
}
public static void writeObj() throws Exception {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:\\info.txt"));
oos.writeObject(new Person("lisi", 39, "上海"));
oos.close();
}
public static void readerObj() throws FileNotFoundException, Exception {
java.io.ObjectInputStream ois = new java.io.ObjectInputStream(new FileInputStream("d:\\info.txt"));
Person p = (Person) ois.readObject();
System.out.println(p);
ois.close();
}
}
person pojo
public class Person implements Serializable {
public static final long serialVersionUID = 42L;// 手动生成UID根据UID来标示一个类
// 当你改变person同样能序列反序列
private String name;
private int age;// transient int age 也是不能序列化的因为有transient关键字
static String work = "北京";// 不能被序列化因为 static是放在方法区的 而对象是放在堆总的 序列化只能序列堆的对象
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;
}
public static String getWork() {
return work;
}
public static void setWork(String work) {
Person.work = work;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public Person(String name, int age, String work) {
this.work = work;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ",work=" + work + "]";
}
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------