读书人

序列化和资料的输入输出

发布时间: 2012-10-31 14:37:31 作者: rapoo

序列化和文件的输入输出

//解序列化FileInputStream fileStream = new FileInputStream("MyGame.ser");ObjectInputStream os = new ObjectInputStream(fileStream);Object one = os.readObject();Object two = os.readObject();//每次调用readObject()都会从Stream中读出下一个对象,与写入顺序相同GameCharacter elf = (GameCharacter )one;//转换对象类型GameCharacter troll = (GameCharacter )two;os.close();//FileInputStream会自动跟着关掉


解序列化时transient的变量是null或者是primitive主数据类型的默认值。构造函数不会执行,因为一旦执行对象的状态又变成全新的了,这不是解序列化想要的结果。
如果对象在继承树上有个不可序列化的祖先类,则该不可序列化类以及在它之上的类的构造函数(就算是可序列化也一样)就会执行。

静态变量不会被序列化,因为它不是“每个对象一个”。

对象的序列化可能会存储一些基本的类的信息(比如类名,能保证在解序列化时能找到类),其他的大部分关于类的信息都不会存储,需要时去找内存中类的定义。----自己想的

读文件的时候文件不存在不会创建,写文件时若不存在则会创建

对象被序列化的同时,该对象会被盖上一个类的版本识别ID(serialVersionUID)。如果想在类变动后还能成功还原被序列化了的对象,就要把当初的serialVersionUID放在class中,让类在演化的过程中保持相同ID。但是前提是你得要对带回旧对象的任何问题负起全责。

读书人网 >编程

热点推荐