黑马程序员技术交流社区
标题: 对象序列化 [打印本页]
作者: 顾传文 时间: 2013-2-28 14:18
标题: 对象序列化
本帖最后由 顾传文 于 2013-3-12 09:14 编辑
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Test {
public static void main(String[] args) throws Exception{
writerObj();
readObj();
}
//将堆内存中的Perosn对象保存到文件中
public static void writerObj() throws Exception{
ObjectOutputStream objectOutputStream = new ObjectOutputStream(
new FileOutputStream("c:\\persons.object"));
objectOutputStream.writeObject(new Person("guchuanwen",25,"chinese"));
}
//将文件中的内容读到堆内存中。
public static void readObj() throws Exception{
ObjectInputStream objectInputStream = new ObjectInputStream(
new FileInputStream("c:\\persons.object"));
Person person = (Person)objectInputStream.readObject();
System.out.println(person);
}
}
/**
* Serializable接口没有需要实现方法,
* 没有实现方法的接口为标记接口。
*/
class Person implements Serializable{
//serialVersionUID的访问修饰符没有要求,可以为public,private...
public static final long serialVersionUID = 42L;
private String name;
private transient Integer age;
static String country ="cn";
public Person(String name,Integer age,String country){
this.name = name;
this.age = age;
this.country = country;
}
public String toString(){
return name+":"+age+":"+country;
}
}
打印结果:guchuanwen:null:chinese
怎么我这里的county读出来不是cn而是Chinese呢?static类型的字段不是不被序列化的吗?
作者: 颜春 时间: 2013-2-28 15:00
对 你说的没错 声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态
但是this关键字 是指向当前对象 也就是重新给country附上了值
如果想输出cn 的话 把this去掉 就体现声明为static类型的成员变量不能被序列化
作者: lzw123451 时间: 2013-2-28 15:10
静态成员不会被序列化。(当把obj对象写入到文件中时,修改后的静态成员数据不保存入(原始值是什么就还是什么)。它只对堆中的对象序列化)
还有就是 有关键字transient关键字修饰的成员 不被序列化。
具体看毕老师视频 IO流(对象的序列化)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |