对象流可以用来序列化对象
但是类要序列化我们需要实现接口Serializable 并且在类中增加一个静态的 static final long serialVersionUID 静态类常量
_
序列化需要满足的条件
- 需要实现接口:Serializable
- 当前类提供一个全局常量 serialVersionUID
- 类中所有熟悉也都必须可序列化,(默认情况下,基本数据类型可序列化,如果是对象,对象也得做可序列化实现)
_
补充:被static和transient修饰的成员变量不能被序列化
transient 就是用来标识不需要序列化的属性,只要标识了序列化对象的时候,这个属性就不会被序列化。
我们可以使用idea帮我们自动添加这个常量,下图中打上勾
_
package com.daijunyi.file;import java.io.*;class Person implements Serializable{private static final long serialVersionUID = 7080081555008858362L;private String name;private Integer age;public Person(String name, Integer age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}public class ObjectInputStreamtest {public static void main(String[] args) throws IOException, ClassNotFoundException {//写对象到文件中FileOutputStream fis = new FileOutputStream("person.tmp");ObjectOutputStream oos = new ObjectOutputStream(fis);oos.writeObject(new Person("戴先生",32));oos.close();//从文件中读对象回来ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.tmp"));Person o = (Person) ois.readObject();System.out.println(o.toString());ois.close();}}
