1、使用序列化流将对象写到文件时,需要让Javabean类实现Serializable接口。否则,会出现NotSerializableException异常
2、序列化流写到文件中的数据是不能修改的,一旦修改就无法再次读回来了
3、 序列化对象后,修改了Javabean类,再次反序列化,会不会有问题?会出问题,会抛出InvalidclassException异常解决方案:给Javabean类添加serialVersionUID(列号、版本号)
4、如果一个对象中的某个成员变量的值不想被序列化又该如何实现呢?该关键字标记的成员变量不参与序列化过程解决方案:给该成员变量加transient关键字修饰
大家可以拿着下面的代码自己去运行一下看看对应文件是否序列化成功
package com.objectStream;
import java.io.Serial;
import java.io.Serializable;
/**
* @author helloZZ
*/
public class User implements Serializable {
@Serial
private static final long serialVersionUID = -7887220945484575938L;
private String name;
private int age;
private transient String address;
public User() {
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public User( String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
/**
* 获取
* @return address
*/
public String getAddress() {
return address;
}
/**
* 设置
* @param address
*/
public void setAddress(String address) {
this.address = address;
}
}
package com.objectStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
// 对象序列化
public class Test01 {
public static void main(String[] args) throws IOException {
User user1 = new User("张三",23,"四川省成都市");
User user2 = new User("李四",22,"四川省成都市");
User user3 = new User("王五",21,"四川省成都市");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\Stream\\test.txt"));
ArrayList<User> arrayList = new ArrayList<>();
arrayList.add(user1);
arrayList.add(user2);
arrayList.add(user3);
oos.writeObject(arrayList);
oos.close();
}
}
package com.objectStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
// 对象反序列化
public class Test02 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\Stream\\test.txt"));
ArrayList<User> list = (ArrayList<User>) ois.readObject();
for(User user:list){
System.out.println(user);
}
ois.close();
}
}