Java-IO流-对象流操作自定义类对象
Java-IO流-对象流操作自定义类对象
- 对象流可以将内存中的对象序列化写入本地文件中,也可以从本地文件中反序列化读取对象到内存中
- 但是,对于自定义类来说,想要实现序列化,必须要实现Serializable接口
- 如果没有实现Serializable接口的类在进行序列化的时候会出
没有序列化异常 NotSerializableException
- Serializable接口是一个标记接口,接口中没有属性和方法
public interface Serializable {
}
- 序列化的细节:
- 被序列化的类的内部的所有属性,必须是可序列化的
- 基本数据类型都是可序列化的
- static,transient修饰的属性 不可以被序列化
- IDEA自动生成序列化版本号的配置
示例:
- 首先,先准备一个自定义类
public class Person implements java.io.Serializable{
// 属性
private int age;
private String name;
// set get 方法
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 构造器
public Person() {
}
public Person(int age, String name) {
this.age = age;
this.name = name;
}
// 重写toString方法
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
- 然后使用对对象进行序列化与发序列化
public class Test01 {
// 这是main方法,实现程序主要逻辑
public static void main(String[] args) throws IOException {
// 序列化 将内存中的对象写入文件中
// 创建Person对象
Person p1 = new Person(19, "lili");
// 输出对象流
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("E:\\Study\\java_train_code\\JavaSE基础\\demo4.txt")));
// 输出
oos.writeObject(p1);
// 输入对象流
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("E:\\Study\\java_train_code\\JavaSE基础\\demo4.txt")));
// 读取到内存中
Person p1 = (Person)(ois.readObject());
System.out.println(p1);
// 关闭流
ois.close();
oos.close();
}
}