笔记 第1章 流与文件

笔记 第1章 流与文件,第1张

 1.5 对象流与序列化

虽说可用固定长度解决对象保存,但是仍然存在类似继承、多态的参数不固定的情况。可用对象流来解决。对象流的对象必须实现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虚拟机》,看完之后再看原书这部分比较合适,那个里面内容比较全面。

最后几句还挺有用的:

💊 对象流输出中包含所有对象的类型和数据域

💊 每个对象都被赋予一个序列号

💊 相同对象的重复出现将被存储为对这个对象的序列号引用

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/922130.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存