引用类型(对象)保留数据+类型
- 序列化
ObjectOutputStream
- 反序列化
ObjectInputStream
注意:
- 先序列化后反序列化,反序列化顺序必须与序列化顺序一致
- 不是所有的对象都可以序列化,Java中必须实现
Serializable
接口
- 不是所有的属性都需要序列化,
transient
1. 序列化
/**
* 将对象保存到文件中(序列化)
*/
public void Write(String path) {
// 对象
Student student = new Student("陈奕迅",10000);
// 数组
int[] arr = {1,2,3,4,5};
try {
// 源文件
File file = new File(path);
// 选择流
ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
// 写入
oos.writeObject(student);
oos.writeObject(arr);
oos.flush();
// 释放资源
oos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
2. 反序列化
/**
* 反序列化
* 从文件中读取保存的对象
* @param path
*/
public void Read(String path) {
try {
// 源文件
File file = new File(path);
// 选择流
ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(file)));
Object obj = ois.readObject();
if (obj instanceof Student) {
Student student = (Student) obj;
System.out.println(student.getName());
System.out.println(student.getSalary());
}
int[] arr = (int[]) ois.readObject();
System.out.println(Arrays.toString(arr));
// 释放资源
ois.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}