虽说可用固定长度解决对象保存,但是仍然存在类似继承、多态的参数不固定的情况。可用对象流来解决。对象流的对象必须实现Serializable接口:
写入:使用 ObjectOutputStream 的 writeObject
读取:使用 ObjectInputStream 的 的 readObject
作者示例 *** 作:
写入过程:
💊 每个对象引用关联一个序列号
💊 第一次遇到的对象,保存
💊 已保存对象输出
读取过程:
💊 第一次遇到对象时构建
💊 重复遇到时关联
❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤
import editor.cn.com.oom.Employee;
import java.io.*;
public class Main{
public static void main(String[] args) throws InterruptedException, IOException, ClassNotFoundException {
Employee[] staff = new Employee[3];
staff[0] = new Employee("Carl Cracker", 75000,1987, 12, 15);
staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15);
try(ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("employee.dat"))){
out.writeObject(staff);
}
try(ObjectInputStream in = new ObjectInputStream(new FileInputStream("employee.dat"))){
Employee[] newStaff = (Employee[]) in.readObject();
newStaff[1].raiseSalary(10);
for(Employee e:newStaff){
System.out.println(e);
}
}
}
}
❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤
运行结果:
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
小贴士:
上述例子请务必让 Employee 实现 Serializable 和定义版本号!
1.5.1 理解对象序列化的文件格式个人建议:这节作者的目的纯粹秀技术,讲的不清晰。真想学习请看《深入理解Java虚拟机》,看完之后再看原书这部分比较合适,那个里面内容比较全面。
最后几句还挺有用的:
💊 对象流输出中包含所有对象的类型和数据域
💊 每个对象都被赋予一个序列号
💊 相同对象的重复出现将被存储为对这个对象的序列号引用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)