类的序列化

序列化的目的:为了能够保存对象

序列化的实质:将类通过流的形式存放到文件中。

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会跟着关掉

你可能感兴趣的:(java,开发语言)