若是要让类可以被序列化,就实现Serializable接口。this
简单例子:spa
public class Dog implements Serializable{
//若是某实例变量不能或不该该被序列化,就把它标记为transient的。当经过被还原序列化的类获得它时,其值会为null。当去掉该标记获得的name仍是原来的。
transient String name;
public Dog(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
对象
public class Test1 {
public static void main(String[] args) {
try {
FileOutputStream fileOutputStream=new FileOutputStream("game.ser");
ObjectOutputStream objectOutputStream=new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(new Dog("lele"));
System.out.println("写入成功");
FileInputStream fileInputStream=new FileInputStream("game.ser");
ObjectInputStream objectInputStream=new ObjectInputStream(fileInputStream);
Dog dog=(Dog) objectInputStream.readObject();
System.out.println("读取结果:");
System.out.println("dog name is"+dog.getName());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
接口
对象的序列化:get
1.你能够经过序列化来存储对象的状态。it
2.使用ObjectOutputStream来序列化对象io
3.用fileoutputstream连接objectoutputStream来将对象序列化到文件上。class
4.对象必须实现序列化接口才能被序列化。若是付烈实现了序列化,则子类也就自动地有实现,而无论是否有明确的声明。stream
5.除非该实例变量被标记为transient不然,该变量被还原的时候会被赋予为null或primitive住数据类型的默认值。变量
6.读取对象的顺序必须与写入对象的顺序相同。
7.静态变量不会被实例化。由于全部的对象都是哦你共享同一份静态变量值。