对象流可以用来序列化对象
但是类要序列化我们需要实现接口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;
}
@Override
public 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();
}
}