序列化的目的:为了能够保存对象
序列化的实质:
1、创建出FIleOutputStream
FileOutputStream fileStream = new FileOutputStream("MyGame.ser");//FileOutputStream有写字节的方法,可以写入文件
2、创建出ObjectOutputStream
ObjectOutputStream os = new ObjectOutputStream(fileStream);//但我们一般不直接写字节,会先用 ObjectOutputStream 来把对象打包,再写入文件
3、调用writeObject方法来打包并写入文件
os.writeObject(characterOne);
os.writeObject(characterTwo);
os.writeObject(characterThree);
4、关闭ObjectOutputStream
os.close();
类能够被序列化的条件:
实现Serializable接口,该接口又被称为maker或tag类的标记用接口,因为此接口没有任何方法需要实现。它的的唯一目的就是声明实现这个接口的类是可以被序列化的。也就是说此类型的对象可以通过序列化来存储。如果某类是可序列化的,则它的子类也自动的可以序列化。
序列化对象时实际上保存了对象的什么东西?
答:对象的状态,即实例变量的值。就是这些值让同一类的不同实例有不同的意义。
注:序列化必须时全有或者全无的,即序列化时必须保证类内部的所有实例变量全部被序列化。如果某个实例变量不能或者不应该被序列化,就把它标记为transient(暂时的);
解序列化:将文件还原成活生生的对象。
1、创建FileInputStream
FileInputStream fileStream = new FIleInputStream(MyGame.ser);
2、创建ObjectInputStream
ObjectInputStream os = new ObjectInputStream(fileStream);
3、读取对象
Object one = new os.readObject();
Object two = new os.readObject();
Object three = new os.readObject();
4、转换对象类型
GameCharacter elf = (GameCharacter)one;//返回的Object类型,必须转换类型
GameCharacter troll = (GameCharacter)two;
GameCharacter mag = (GameCharacter) three;
5、关闭ObjectInputStream
os.close();//FileInputStream会跟着关掉
储存与恢复游戏人物实例代码
没找见代码,可能删了,抱歉!